• 单点登录-系统搭建


      之前说了单点登录系统的原理,这篇就来点硬货,说下单点登录的一个系统是如何搭建的。

     架构分析

        表现层:提供手机客户端,或其他系统的调用

          表现层的存在意义就是,提供给所有非本系统的其他系统进行登录。具体实现的思路就是,编写一个登录的接口(本系统使用RESTful风格的),让需要该服务的其他系统通过接口提交数据,并获得相应的返回。

        服务层:系统内部的调用

          这个比较简单了,内部的所有登录,查询的操作都是通过服务层去实现的。

        我们本次的搭建使用maven实现的,如果使用其他技术,请自行从网上查找其他资料

        服务层

        首先是我们的服务层,我们的服务层中总共只有三个子项目:分别是聚合工程的父工程(taotao-sso)还有就是两个子工程,负责提供接口和依赖的接口工程(taotao-sso-interface)和负责真正的业务处理的业务处理工程(taotao-sso-service)。跟其他聚合工程的的服务层相比,它的里面是没有实体层(pojo)和持久层(mapper)的。因为项目中一般所有的数据库表都是有一个专门的团队去维护的(数据库开发工程师),目的是保证数据的安全性、读取速度等。所以对应的实体层(pojo)和持久层(mapper)的编写一般也都是由他们来进行完成的。

        而我们的单点登录系统肯定是要使用实体和持久层的,这个时候,我们需要依赖后台的pojo和mapper就可以了。

         表现层

        表现层主要提供接口给别的系统用,就是一个普通的表现层web工程。

     搭建

      搭建taotao-sso

       创建工程

        创建聚合工程父工程

        

        

        

        创建聚合工程子工程-interface

        

        

        

        创建聚合工程子工程-service

         

        

       加入依赖(就是pom.xml文件中的代码)

        这里依赖的那个parent的包下的xml文件也一并提供下,建工程的过程就不写了,参见taotao-sso

        
      1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      2   <modelVersion>4.0.0</modelVersion>
      3   <groupId>com.taotao</groupId>
      4   <artifactId>taotao-parent</artifactId>
      5   <version>0.0.1-SNAPSHOT</version>
      6   <packaging>pom</packaging>
      7   
      8       <!-- 集中定义依赖版本号 -->
      9     <properties>
     10         <junit.version>4.12</junit.version>
     11         <spring.version>4.1.3.RELEASE</spring.version>
     12         <mybatis.version>3.2.7</mybatis.version>
     13         <mybatis.spring.version>1.2.2</mybatis.spring.version>
     14         <mybatis.paginator.version>1.2.15</mybatis.paginator.version>
     15         <mysql.version>5.1.32</mysql.version>
     16         <slf4j.version>1.6.4</slf4j.version>
     17         <jackson.version>2.4.2</jackson.version>
     18         <druid.version>1.0.9</druid.version>
     19         <jolbox.version>0.8.0.RELEASE</jolbox.version>
     20         <jstl.version>1.2</jstl.version>
     21         <servlet-api.version>2.5</servlet-api.version>
     22         <jsp-api.version>2.0</jsp-api.version>
     23         <joda-time.version>2.5</joda-time.version>
     24         <commons-lang3.version>3.3.2</commons-lang3.version>
     25         <commons-io.version>1.3.2</commons-io.version>
     26         <commons-net.version>3.3</commons-net.version>
     27         <pagehelper.version>3.7.5</pagehelper.version>
     28         <mapper.version>2.3.4</mapper.version>
     29         <jsqlparser.version>0.9.1</jsqlparser.version>
     30         <commons-fileupload.version>1.3.1</commons-fileupload.version>
     31         <commons-codec.version>1.9</commons-codec.version>
     32         <jedis.version>2.7.2</jedis.version>
     33         <solrj.version>4.10.3</solrj.version>
     34         <dubbo.version>2.5.3</dubbo.version>
     35         <zookeeper.version>3.4.7</zookeeper.version>
     36         <zkclient.version>0.1</zkclient.version>
     37         <activemq.version>5.12.0</activemq.version>
     38         <freemarker.version>2.3.23</freemarker.version>
     39         <quartz.version>2.2.2</quartz.version>
     40     </properties>
     41 
     42     <dependencies>
     43         <!-- 单元测试 -->
     44         <dependency>
     45             <groupId>junit</groupId>
     46             <artifactId>junit</artifactId>
     47             <version>${junit.version}</version>
     48             <scope>test</scope>
     49         </dependency>
     50 
     51         <!-- Spring -->
     52         <dependency>
     53             <groupId>org.springframework</groupId>
     54             <artifactId>spring-webmvc</artifactId>
     55             <version>${spring.version}</version>
     56         </dependency>
     57         <dependency>
     58             <groupId>org.springframework</groupId>
     59             <artifactId>spring-jdbc</artifactId>
     60             <version>${spring.version}</version>
     61         </dependency>
     62         <dependency>
     63             <groupId>org.springframework</groupId>
     64             <artifactId>spring-aspects</artifactId>
     65             <version>${spring.version}</version>
     66         </dependency>
     67         <dependency>
     68             <groupId>org.springframework</groupId>
     69             <artifactId>spring-context-support</artifactId>
     70             <version>${spring.version}</version>
     71         </dependency>
     72 
     73         <!-- Mybatis -->
     74         <dependency>
     75             <groupId>org.mybatis</groupId>
     76             <artifactId>mybatis</artifactId>
     77             <version>${mybatis.version}</version>
     78         </dependency>
     79         <dependency>
     80             <groupId>org.mybatis</groupId>
     81             <artifactId>mybatis-spring</artifactId>
     82             <version>${mybatis.spring.version}</version>
     83         </dependency>
     84 
     85         <!-- 通用Mapper -->
     86         <dependency>
     87             <groupId>com.github.abel533</groupId>
     88             <artifactId>mapper</artifactId>
     89             <version>${mapper.version}</version>
     90         </dependency>
     91 
     92         <!-- 分页助手 -->
     93         <dependency>
     94             <groupId>com.github.pagehelper</groupId>
     95             <artifactId>pagehelper</artifactId>
     96             <version>${pagehelper.version}</version>
     97         </dependency>
     98         <dependency>
     99             <groupId>com.github.jsqlparser</groupId>
    100             <artifactId>jsqlparser</artifactId>
    101             <version>${jsqlparser.version}</version>
    102         </dependency>
    103 
    104         <!-- MySql -->
    105         <dependency>
    106             <groupId>mysql</groupId>
    107             <artifactId>mysql-connector-java</artifactId>
    108             <version>${mysql.version}</version>
    109         </dependency>
    110 
    111         <!-- 日志 -->
    112         <dependency>
    113             <groupId>org.slf4j</groupId>
    114             <artifactId>slf4j-log4j12</artifactId>
    115             <version>${slf4j.version}</version>
    116         </dependency>
    117 
    118         <!-- Jackson Json处理工具包 -->
    119         <dependency>
    120             <groupId>com.fasterxml.jackson.core</groupId>
    121             <artifactId>jackson-databind</artifactId>
    122             <version>${jackson.version}</version>
    123         </dependency>
    124 
    125         <!-- 连接池 -->
    126         <dependency>
    127             <groupId>com.jolbox</groupId>
    128             <artifactId>bonecp-spring</artifactId>
    129             <version>${jolbox.version}</version>
    130         </dependency>
    131 
    132         <!-- JSP相关 -->
    133         <dependency>
    134             <groupId>jstl</groupId>
    135             <artifactId>jstl</artifactId>
    136             <version>${jstl.version}</version>
    137         </dependency>
    138         <dependency>
    139             <groupId>javax.servlet</groupId>
    140             <artifactId>servlet-api</artifactId>
    141             <version>${servlet-api.version}</version>
    142             <scope>provided</scope>
    143         </dependency>
    144         <dependency>
    145             <groupId>javax.servlet</groupId>
    146             <artifactId>jsp-api</artifactId>
    147             <version>${jsp-api.version}</version>
    148             <scope>provided</scope>
    149         </dependency>
    150 
    151         <!-- 时间操作组件 -->
    152         <dependency>
    153             <groupId>joda-time</groupId>
    154             <artifactId>joda-time</artifactId>
    155             <version>${joda-time.version}</version>
    156         </dependency>
    157 
    158         <!-- Apache工具组件 -->
    159         <dependency>
    160             <groupId>org.apache.commons</groupId>
    161             <artifactId>commons-lang3</artifactId>
    162             <version>${commons-lang3.version}</version>
    163         </dependency>
    164         <dependency>
    165             <groupId>org.apache.commons</groupId>
    166             <artifactId>commons-io</artifactId>
    167             <version>${commons-io.version}</version>
    168         </dependency>
    169 
    170         <!-- 文件上传组件 -->
    171         <dependency>
    172             <groupId>commons-fileupload</groupId>
    173             <artifactId>commons-fileupload</artifactId>
    174             <version>${commons-fileupload.version}</version>
    175         </dependency>
    176 
    177         <!-- dubbo相关 -->
    178         <dependency>
    179             <groupId>com.alibaba</groupId>
    180             <artifactId>dubbo</artifactId>
    181             <version>${dubbo.version}</version>
    182             <exclusions>
    183                 <exclusion>
    184                     <groupId>org.springframework</groupId>
    185                     <artifactId>spring</artifactId>
    186                 </exclusion>
    187                 <exclusion>
    188                     <groupId>org.jboss.netty</groupId>
    189                     <artifactId>netty</artifactId>
    190                 </exclusion>
    191             </exclusions>
    192         </dependency>
    193         <dependency>
    194             <groupId>org.apache.zookeeper</groupId>
    195             <artifactId>zookeeper</artifactId>
    196             <version>${zookeeper.version}</version>
    197         </dependency>
    198         <dependency>
    199             <groupId>com.github.sgroschupf</groupId>
    200             <artifactId>zkclient</artifactId>
    201             <version>${zkclient.version}</version>
    202         </dependency>
    203 
    204         <!-- 加密解密 -->
    205         <dependency>
    206             <groupId>commons-codec</groupId>
    207             <artifactId>commons-codec</artifactId>
    208             <version>${commons-codec.version}</version>
    209         </dependency>
    210 
    211         <!-- 定时任务Quartz -->
    212         <dependency>
    213             <groupId>org.quartz-scheduler</groupId>
    214             <artifactId>quartz</artifactId>
    215             <version>2.2.1</version>
    216         </dependency>
    217         
    218         <!-- ActiveMQ依赖 -->
    219         <dependency>
    220             <groupId>org.apache.activemq</groupId>
    221             <artifactId>activemq-all</artifactId>
    222             <version>${activemq.version}</version>
    223         </dependency>
    224         <dependency>
    225             <groupId>org.springframework</groupId>
    226             <artifactId>spring-jms</artifactId>
    227             <version>${spring.version}</version>
    228         </dependency>
    229 
    230         <!-- 静态化freemarker -->
    231         <dependency>
    232             <groupId>org.freemarker</groupId>
    233             <artifactId>freemarker</artifactId>
    234             <version>${freemarker.version}</version>
    235         </dependency>
    236         
    237         <!-- Redis客户端 -->
    238         <dependency>
    239             <groupId>redis.clients</groupId>
    240             <artifactId>jedis</artifactId>
    241             <version>${jedis.version}</version>
    242         </dependency>
    243         
    244         <!-- solr客户端 -->
    245         <dependency>
    246             <groupId>org.apache.solr</groupId>
    247             <artifactId>solr-solrj</artifactId>
    248             <version>${solrj.version}</version>
    249         </dependency>
    250 
    251     </dependencies>
    252 
    253     <build>
    254         <finalName>${project.artifactId}</finalName>
    255         <plugins>
    256             <!-- 资源文件拷贝插件 -->
    257             <plugin>
    258                 <groupId>org.apache.maven.plugins</groupId>
    259                 <artifactId>maven-resources-plugin</artifactId>
    260                 <version>2.7</version>
    261                 <configuration>
    262                     <encoding>UTF-8</encoding>
    263                 </configuration>
    264             </plugin>
    265             <!-- java编译插件 -->
    266             <plugin>
    267                 <groupId>org.apache.maven.plugins</groupId>
    268                 <artifactId>maven-compiler-plugin</artifactId>
    269                 <version>3.2</version>
    270                 <configuration>
    271                     <source>1.7</source>
    272                     <target>1.7</target>
    273                     <encoding>UTF-8</encoding>
    274                 </configuration>
    275             </plugin>
    276         </plugins>
    277         <pluginManagement>
    278             <plugins>
    279                 <!-- 配置Tomcat插件 -->
    280                 <plugin>
    281                     <groupId>org.apache.tomcat.maven</groupId>
    282                     <artifactId>tomcat7-maven-plugin</artifactId>
    283                     <version>2.2</version>
    284                 </plugin>
    285             </plugins>
    286         </pluginManagement>
    287         <resources>
    288             <!-- 使用Maven部署的时候,xml和properties配置文件也一起部署到Tomcat -->
    289             <resource>
    290                 <directory>src/main/java</directory>
    291                 <includes>
    292                     <include>**/*.properties</include>
    293                     <include>**/*.xml</include>
    294                 </includes>
    295                 <filtering>false</filtering>
    296             </resource>
    297             <!-- 默认是以下配置 -->
    298             <resource>
    299                 <directory>src/main/resources</directory>
    300                 <includes>
    301                     <include>**/*.properties</include>
    302                     <include>**/*.xml</include>
    303                 </includes>
    304                 <filtering>false</filtering>
    305             </resource>
    306         </resources>
    307     </build>
    308 </project>
    View Code

        taotao-sso

        
     1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     3     <modelVersion>4.0.0</modelVersion>
     4     <parent>
     5         <groupId>com.taotao</groupId>
     6         <artifactId>taotao-parent</artifactId>
     7         <version>0.0.1-SNAPSHOT</version>
     8     </parent>
     9     <groupId>com.taotao</groupId>
    10     <artifactId>taotao-sso</artifactId>
    11     <version>0.0.1-SNAPSHOT</version>
    12     <packaging>pom</packaging>
    13     <modules>
    14         <module>taotao-sso-interface</module>
    15         <module>taotao-sso-service</module>
    16     </modules>
    17 
    18     <build>
    19         <plugins>
    20             <!-- 配置Tomcat插件 -->
    21             <plugin>
    22                 <groupId>org.apache.tomcat.maven</groupId>
    23                 <artifactId>tomcat7-maven-plugin</artifactId>
    24                 <configuration>
    25                     <port>8082</port>
    26                     <path>/</path>
    27                 </configuration>
    28             </plugin>
    29         </plugins>
    30     </build>
    31 </project>
    View Code

        taotao-sso-interface

        
     1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     3     <modelVersion>4.0.0</modelVersion>
     4     <parent>
     5         <groupId>com.taotao</groupId>
     6         <artifactId>taotao-sso</artifactId>
     7         <version>0.0.1-SNAPSHOT</version>
     8     </parent>
     9     <artifactId>taotao-sso-interface</artifactId>
    10     <version>1.0.0-SNAPSHOT</version>
    11 
    12     <dependencies>
    13         <!-- 加入taotao-manager-pojo依赖 -->
    14         <dependency>
    15             <groupId>com.taotao</groupId>
    16             <artifactId>taotao-manager-pojo</artifactId>
    17             <version>1.0.0-SNAPSHOT</version>
    18         </dependency>
    19     </dependencies>
    20 </project>
    View Code

        taotao-sso-service

        
     1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     3     <modelVersion>4.0.0</modelVersion>
     4     <parent>
     5         <groupId>com.taotao</groupId>
     6         <artifactId>taotao-sso</artifactId>
     7         <version>0.0.1-SNAPSHOT</version>
     8     </parent>
     9     <artifactId>taotao-sso-service</artifactId>
    10     <version>1.0.0-SNAPSHOT</version>
    11     <packaging>war</packaging>
    12 
    13     <dependencies>
    14         <!-- 加入taotao-manager-mapper依赖 -->
    15         <dependency>
    16             <groupId>com.taotao</groupId>
    17             <artifactId>taotao-manager-mapper</artifactId>
    18             <version>1.0.0-SNAPSHOT</version>
    19         </dependency>
    20 
    21         <!-- 加入taotao-sso-interface依赖 -->
    22         <dependency>
    23             <groupId>com.taotao</groupId>
    24             <artifactId>taotao-sso-interface</artifactId>
    25             <version>1.0.0-SNAPSHOT</version>
    26         </dependency>
    27     </dependencies>
    28 </project>
    View Code

       加入配置文件

        在taotao-service工程中,创建如图示目录和文件:

        

        其中的各个文件的配置:

        SqlMapConfig.xml

        
     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE configuration
     3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
     4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
     5 <configuration>
     6 
     7     <!-- 配置通用mapper -->
     8     <plugins>
     9     
    10         <!-- com.github.pagehelper为PageHelper类所在包名 -->
    11         <plugin interceptor="com.github.pagehelper.PageHelper">
    12             <property name="dialect" value="mysql" />
    13             <!-- 该参数默认为false -->
    14             <!-- 设置为true时,使用RowBounds分页会进行count查询 -->
    15             <property name="rowBoundsWithCount" value="true" />
    16             
    17         </plugin>
    18     
    19         <plugin interceptor="com.github.abel533.mapperhelper.MapperInterceptor">
    20             <!--================================================ -->
    21             <!--可配置参数说明(一般无需修改) -->
    22             <!--================================================ -->
    23             <!--UUID生成策略 -->
    24             <!--配置UUID生成策略需要使用OGNL表达式 -->
    25             <!--默认值32位长度:@java.util.UUID@randomUUID().toString().replace("-", "") -->
    26             <!--<property name="UUID" value="@java.util.UUID@randomUUID().toString()"/> -->
    27             <!--主键自增回写方法,默认值MYSQL,详细说明请看文档 -->
    28             <property name="IDENTITY" value="MYSQL" />
    29             <!--序列的获取规则,使用{num}格式化参数,默认值为{0}.nextval,针对Oracle -->
    30             <!--可选参数一共3个,对应0,1,2,分别为SequenceName,ColumnName,PropertyName -->
    31             <!-- <property name="seqFormat" value="{0}.nextval"/> -->
    32             <!--主键自增回写方法执行顺序,默认AFTER,可选值为(BEFORE|AFTER) -->
    33             <!--<property name="ORDER" value="AFTER"/> -->
    34             <!--通用Mapper接口,多个通用接口用逗号隔开 -->
    35             <property name="mappers" value="com.github.abel533.mapper.Mapper" />
    36         </plugin>
    37 
    38         
    39 
    40     </plugins>
    41     
    42 
    43 </configuration>
    View Code

        jdbc.properties

        
    1 jdbc.driver=com.mysql.jdbc.Driver
    2 jdbc.url=jdbc:mysql://localhost:3306/数据库名
    3 jdbc.username=root
    4 jdbc.password=root
    View Code

        jedis.properties

        
     1 #这里引用的是我的个人配置,各位读者请根据自己的配置自行修改自己的#reidis 的参数。默认使用的是单机版的,如果有想测试redis集群版的,可
     2 #以通过我的博客查看如何配置。并在application.jedis 中进行修改
     3 #配置redis单机版的参数
     4 jedis.host=192.168.37.161
     5 jedis.port=6379
     6 
     7 #配置redis集群版的参数
     8 cluster.host1=192.168.37.161
     9 cluster.port1=7001
    10 
    11 cluster.host2=192.168.37.161
    12 cluster.port2=7002
    13 
    14 cluster.host3=192.168.37.161
    15 cluster.port3=7003
    16 
    17 cluster.host4=192.168.37.161
    18 cluster.port4=7004
    19 
    20 cluster.host5=192.168.37.161
    21 cluster.port5=7005
    22 
    23 cluster.host6=192.168.37.161
    24 cluster.port6=7006
    View Code

        web.xml

        
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3     xmlns="http://java.sun.com/xml/ns/javaee"
     4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     5     id="MyWebApp" version="2.5">
     6     <display-name>taotao-sso</display-name>
     7 
     8     <welcome-file-list>
     9         <welcome-file>index.jsp</welcome-file>
    10     </welcome-file-list>
    11 
    12     <!-- spring -->
    13     <context-param>
    14         <param-name>contextConfigLocation</param-name>
    15         <param-value>classpath:spring/applicationContext*.xml</param-value>
    16     </context-param>
    17 
    18     <!-- spring监听器 -->
    19     <listener>
    20         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    21     </listener>
    22 
    23 </web-app>
    View Code

        applicationContext-dao.xml

        
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
     4     xmlns:context="http://www.springframework.org/schema/context"
     5     xmlns:mvc="http://www.springframework.org/schema/mvc"
     6     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     7         http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
     8         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
     9 
    10     <!-- 配置 读取properties文件 jdbc.properties -->
    11     <context:property-placeholder location="classpath:*.properties" />
    12 
    13     <!-- 配置数据源 -->
    14     <bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource"
    15         destroy-method="close">
    16         <!-- 数据库驱动 -->
    17         <property name="driverClass" value="${jdbc.driver}" />
    18         <!-- 相应驱动的jdbcUrl -->
    19         <property name="jdbcUrl" value="${jdbc.url}" />
    20         <!-- 数据库的用户名 -->
    21         <property name="username" value="${jdbc.username}" />
    22         <!-- 数据库的密码 -->
    23         <property name="password" value="${jdbc.password}" />
    24         <!-- 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0 -->
    25         <property name="idleConnectionTestPeriod" value="60" />
    26         <!-- 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0 -->
    27         <property name="idleMaxAge" value="30" />
    28         <!-- 每个分区最大的连接数 -->
    29         <property name="maxConnectionsPerPartition" value="150" />
    30         <!-- 每个分区最小的连接数 -->
    31         <property name="minConnectionsPerPartition" value="5" />
    32     </bean>
    33 
    34     <!-- 配置SqlSession会话工厂 -->
    35     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    36         <!-- 配置数据源 -->
    37         <property name="dataSource" ref="dataSource" />
    38         <!-- 配置mybatis全局配置文件 -->
    39         <property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" />
    40     </bean>
    41 
    42     <!-- 配置Mapper扫描 -->
    43     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    44         <!-- 配置扫描的包 -->
    45         <property name="basePackage" value="com.taotao.manager.mapper" />
    46     </bean>
    47 </beans>
    View Code

        applicationContext-jedis.xml

        
     1 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
     2     xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop"
     3     xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
     5     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
     6     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
     7     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
     8 
     9     <!-- 配置jedisPool -->
    10     <bean class="redis.clients.jedis.JedisPool">
    11         <constructor-arg name="host" value="${jedis.host}" />
    12         <constructor-arg name="port" value="${jedis.port}" />
    13     </bean>
    14 
    15     <!-- 配置jedisCluster -->
    16     <bean class="redis.clients.jedis.JedisCluster">
    17         <!-- 配置的集群节点信息 -->
    18         <constructor-arg name="nodes">
    19             <set>
    20                 <bean class="redis.clients.jedis.HostAndPort">
    21                     <constructor-arg name="host" value="${cluster.host1}" />
    22                     <constructor-arg name="port" value="${cluster.port1}" />
    23                 </bean>
    24                 <bean class="redis.clients.jedis.HostAndPort">
    25                     <constructor-arg name="host" value="${cluster.host2}" />
    26                     <constructor-arg name="port" value="${cluster.port2}" />
    27                 </bean>
    28                 <bean class="redis.clients.jedis.HostAndPort">
    29                     <constructor-arg name="host" value="${cluster.host3}" />
    30                     <constructor-arg name="port" value="${cluster.port3}" />
    31                 </bean>
    32                 <bean class="redis.clients.jedis.HostAndPort">
    33                     <constructor-arg name="host" value="${cluster.host4}" />
    34                     <constructor-arg name="port" value="${cluster.port4}" />
    35                 </bean>
    36                 <bean class="redis.clients.jedis.HostAndPort">
    37                     <constructor-arg name="host" value="${cluster.host5}" />
    38                     <constructor-arg name="port" value="${cluster.port5}" />
    39                 </bean>
    40                 <bean class="redis.clients.jedis.HostAndPort">
    41                     <constructor-arg name="host" value="${cluster.host6}" />
    42                     <constructor-arg name="port" value="${cluster.port6}" />
    43                 </bean>
    44             </set>
    45         </constructor-arg>
    46     </bean>
    47 
    48     <!-- 配置redis单机版实现 -->
    49     <bean id="jedisPoolUtils" class="com.taotao.sso.redis.impl.JedisPoolUtils" />
    50 
    51     <!-- 配置redis集群版实现 -->
    52 <!--     <bean id="jedisClusterUtils" class="com.taotao.sso.redis.impl.JedisClusterUtils" /> -->
    53 </beans>
    View Code

        对了,还需要引入之前的redis中写的工具类的包。其实大家可以试着自己写一下,很简单的不过我还是提供下代码:建立的包结构如下:  

        

        JedisClusterUtiles.java

        
     1 package com.taotao.manager.redis.impl;
     2 
     3 import org.springframework.beans.factory.annotation.Autowired;
     4 
     5 import com.taotao.manager.redis.RedisUtils;
     6 
     7 import redis.clients.jedis.JedisCluster;
     8 
     9 /**
    10  * 集群版redis
    11  * @author Administrator
    12  *
    13  */
    14 public class RedisCluster implements RedisUtils {
    15 
    16     @Autowired
    17     private JedisCluster jedisCluster;
    18 
    19     @Override
    20     public void set(String key, String value) {
    21         this.jedisCluster.set(key, value);
    22     }
    23 
    24     @Override
    25     public String get(String key) {
    26         String result = this.jedisCluster.get(key);
    27         return result;
    28     }
    29 
    30     @Override
    31     public void del(String key) {
    32         this.jedisCluster.del(key);
    33     }
    34 
    35     @Override
    36     public void expire(String key, Integer seconds) {
    37         this.jedisCluster.expire(key, seconds);
    38     }
    39 
    40     @Override
    41     public void set(String key, String value, Integer seconds) {
    42         this.jedisCluster.set(key, value);
    43         this.jedisCluster.expire(key, seconds);
    44     }
    45 
    46     @Override
    47     public Long incr(String key) {
    48         Long count = this.jedisCluster.incr(key);
    49         return count;
    50     }
    51 }
    View Code

        JedisPoolUtils.java

        
     1 package com.taotao.manager.redis.impl;
     2 
     3 import org.springframework.beans.factory.annotation.Autowired;
     4 
     5 import com.taotao.manager.redis.RedisUtils;
     6 
     7 import redis.clients.jedis.Jedis;
     8 import redis.clients.jedis.JedisPool;
     9 
    10 /**
    11  * 单机版redis实现
    12  * @author Administrator
    13  *
    14  */
    15 public class RedisPool implements RedisUtils {
    16 
    17     @Autowired
    18     private JedisPool jedisPool;
    19 
    20     @Override
    21     public void set(String key, String value) {
    22         Jedis jedis = this.jedisPool.getResource();
    23 
    24         jedis.set(key, value);
    25         jedis.close();
    26     }
    27 
    28     @Override
    29     public String get(String key) {
    30         Jedis jedis = this.jedisPool.getResource();
    31 
    32         String result = jedis.get(key);
    33         jedis.close();
    34 
    35         return result;
    36     }
    37 
    38     @Override
    39     public void del(String key) {
    40         Jedis jedis = this.jedisPool.getResource();
    41 
    42         jedis.del(key);
    43         jedis.close();
    44 
    45     }
    46 
    47     @Override
    48     public void expire(String key, Integer seconds) {
    49         Jedis jedis = this.jedisPool.getResource();
    50 
    51         jedis.expire(key, seconds);
    52         jedis.close();
    53 
    54     }
    55 
    56     @Override
    57     public void set(String key, String value, Integer seconds) {
    58         Jedis jedis = this.jedisPool.getResource();
    59 
    60         jedis.set(key, value);
    61         jedis.expire(key, seconds);
    62         jedis.close();
    63 
    64     }
    65 
    66     @Override
    67     public Long incr(String key) {
    68         Jedis jedis = this.jedisPool.getResource();
    69 
    70         Long count = jedis.incr(key);
    71         jedis.close();
    72 
    73         return count;
    74     }
    75 }
    View Code

        RedisUtils.java

        
     1 package com.taotao.manager.redis;
     2 public interface RedisUtils{
     3     /**
     4      * 保存
     5      * 
     6      * @param key
     7      * @param value
     8      */
     9     public void set(String key, String value);
    10 
    11     /**
    12      * 根据key查询
    13      * 
    14      * @param key
    15      * @return
    16      */
    17     public String get(String key);
    18 
    19     /**
    20      * 删除
    21      * 
    22      * @param key
    23      */
    24     public void del(String key);
    25 
    26     /**
    27      * 根据key设置生存时间
    28      * 
    29      * @param key
    30      * @param seconds
    31      */
    32     public void expire(String key, Integer seconds);
    33 
    34     /**
    35      * 保存并设置生存时间
    36      * 
    37      * @param key
    38      * @param value
    39      * @param seconds
    40      */
    41     public void set(String key, String value, Integer seconds);
    42 
    43     /**
    44      * value加一
    45      * 
    46      * @param key
    47      * @return
    48      */
    49     public Long incr(String key);
    50 
    51 }
    View Code

        applicationContext-serivce.xml

        
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
     4     xmlns:context="http://www.springframework.org/schema/context"
     5     xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
     6     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     7         http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
     8         http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
     9         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    10 
    11     <!-- 配置service扫描 -->
    12     <context:component-scan base-package="com.taotao.sso.service" />
    13 
    14     <!-- 提供方应用信息,用于计算依赖关系 -->
    15     <dubbo:application name="taotao-sso-service" />
    16 
    17     <!-- 使用multicast广播注册中心暴露服务地址 -->
    18     <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->
    19     <!-- <dubbo:registry address="N/A" /> -->
    20     <dubbo:registry protocol="zookeeper" address="192.168.37.161:2181" />
    21 
    22     <!-- 用dubbo协议在20880端口暴露服务 -->
    23     <dubbo:protocol name="dubbo" port="20881" />
    24 
    25     <!-- 声明需要暴露的服务接口 -->
    26     <!-- <dubbo:service interface="com.taotao.content.service.ContentCategoryService" -->
    27     <!-- ref="contentCategoryServiceImpl" /> -->
    28 
    29 </beans>
    View Code

        applicationContext-trans.xml

        
     1 <beans xmlns="http://www.springframework.org/schema/beans"
     2     xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
     3     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
     4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     5     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
     6     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
     7     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
     8     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
     9     
    10     <!-- 定义事务管理器 -->
    11     <bean id="transactionManager"
    12         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    13         <property name="dataSource" ref="dataSource" />
    14     </bean>
    15 
    16     <!-- 定义事务策略 -->
    17     <tx:advice id="txAdvice" transaction-manager="transactionManager">
    18         <tx:attributes>
    19             <!-- 传播行为 -->
    20             <tx:method name="save*" propagation="REQUIRED" />
    21             <tx:method name="insert*" propagation="REQUIRED" />
    22             <tx:method name="add*" propagation="REQUIRED" />
    23             <tx:method name="create*" propagation="REQUIRED" />
    24             <tx:method name="delete*" propagation="REQUIRED" />
    25             <tx:method name="update*" propagation="REQUIRED" />
    26             <tx:method name="find*" propagation="SUPPORTS" read-only="true" />
    27             <tx:method name="select*" propagation="SUPPORTS" read-only="true" />
    28             <tx:method name="get*" propagation="SUPPORTS" read-only="true" />
    29             <tx:method name="query*" propagation="SUPPORTS" read-only="true" />
    30         </tx:attributes>
    31     </tx:advice>
    32 
    33     <aop:config>
    34         <!--pointcut元素定义一个切入点,execution中的第一个星号 用以匹配方法的返回类型,
    35             这里星号表明匹配所有返回类型。 com.abc.dao.*.*(..)表明匹配cn.itcast.mybatis.service包下的所有类的所有 
    36             方法 -->
    37         <aop:pointcut id="myPointcut" expression="execution(* com.taotao.sso.service.*.*(..))" />
    38         <!--将定义好的事务处理策略应用到上述的切入点 -->
    39         <aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut" />
    40     </aop:config>
    41 </beans>
    View Code

      搭建taotao-sso-web

       创建工程

        

        

        

       加入依赖

        pom.xml

        
     1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     3     <modelVersion>4.0.0</modelVersion>
     4     <parent>
     5         <groupId>com.taotao</groupId>
     6         <artifactId>taotao-parent</artifactId>
     7         <version>0.0.1-SNAPSHOT</version>
     8     </parent>
     9     <groupId>com.taotao</groupId>
    10     <artifactId>taotao-sso-web</artifactId>
    11     <version>1.0.0-SNAPSHOT</version>
    12     <packaging>war</packaging>
    13 
    14     <dependencies>
    15         <!-- 加入taotao-sso-interface依赖 -->
    16         <dependency>
    17             <groupId>com.taotao</groupId>
    18             <artifactId>taotao-sso-interface</artifactId>
    19             <version>1.0.0-SNAPSHOT</version>
    20         </dependency>
    21     </dependencies>
    22 
    23     <build>
    24         <plugins>
    25             <!-- 配置Tomcat插件 -->
    26             <plugin>
    27                 <groupId>org.apache.tomcat.maven</groupId>
    28                 <artifactId>tomcat7-maven-plugin</artifactId>
    29                 <configuration>
    30                     <port>8085</port>
    31                     <path>/</path>
    32                 </configuration>
    33             </plugin>
    34         </plugins>
    35     </build>
    36 </project>
    View Code

       加入配置文件

        web.xml

        
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3     xmlns="http://java.sun.com/xml/ns/javaee"
     4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     5     id="MyWebApp" version="2.5">
     6     <display-name>taotao-sso-web</display-name>
     7 
     8     <welcome-file-list>
     9         <welcome-file>index.html</welcome-file>
    10     </welcome-file-list>
    11 
    12     <!-- 配置解决post提交乱码的问题 -->
    13     <filter>
    14         <filter-name>encoding</filter-name>
    15         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    16         <init-param>
    17             <param-name>encoding</param-name>
    18             <param-value>UTF-8</param-value>
    19         </init-param>
    20     </filter>
    21     <filter-mapping>
    22         <filter-name>encoding</filter-name>
    23         <url-pattern>/*</url-pattern>
    24     </filter-mapping>
    25 
    26     <!-- 配置springMVC -->
    27     <servlet>
    28         <servlet-name>taotao-sso-web</servlet-name>
    29         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    30         <!-- 设置springMVC配置文件 -->
    31         <init-param>
    32             <param-name>contextConfigLocation</param-name>
    33             <param-value>classpath:spring/springmvc.xml</param-value>
    34         </init-param>
    35         <load-on-startup>1</load-on-startup>
    36     </servlet>
    37 
    38     <!-- 配置springMVC映射 -->
    39     <servlet-mapping>
    40         <servlet-name>taotao-sso-web</servlet-name>
    41         <!-- 所有的请求进入springMVC -->
    42         <url-pattern>/</url-pattern>
    43     </servlet-mapping>
    44 
    45 </web-app>
    View Code

      springmvc.xml

        
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
     4     xmlns:context="http://www.springframework.org/schema/context"
     5     xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
     6     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     7         http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
     8         http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
     9         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    10 
    11     <!-- 加入properties配置文件 -->
    12     <context:property-placeholder location="classpath:resource/*.properties" />
    13 
    14     <!-- 配置注解驱动 -->
    15     <mvc:annotation-driven />
    16 
    17     <!-- 配置controller扫描 -->
    18     <context:component-scan base-package="com.taotao.sso.controller" />
    19 
    20     <!-- 配置dubbo服务 -->
    21     <dubbo:application name="taotao-sso-web" />
    22 
    23     <!-- 使用广播 -->
    24     <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->
    25     <dubbo:registry protocol="zookeeper" address="192.168.37.161:2181" />
    26 
    27     <!-- 声明要调用的服务,timeout是设置连接超时最长时间,如果不设置,超时时间默认是3秒 -->
    28     <!-- <dubbo:reference interface="com.taotao.content.service.ContentService" -->
    29     <!-- id="contentService" timeout="1000000" /> -->
    30 
    31 </beans>
    View Code

      

  • 相关阅读:
    第一台虚拟机联网
    情话
    03-Linux的shell命令 .doc
    Linux系统目录结构介绍
    href 里面 链接前面加/与不加的区别?(绝对路径与相对路径)
    本地仓库关联远程仓库,从远程仓库克隆代码
    HTml <meta>标签的使用(重要)
    JS中 submit提交与Form表单里的onsubmit的调用问题?
    JS中 confirm()方法的使用?
    表单数据校检方法 onsubmit()的使用?
  • 原文地址:https://www.cnblogs.com/liyasong/p/sso_dj.html
Copyright © 2020-2023  润新知