sso登录发方案.md 5.2 KB

3-1 概要设计

  1. 用户注册 用户登录

  2. passport登录 , 从什么地方来, 到什么地方去

  3. JSESSION的共享 ,实现多服务器集群的 SSO

  4. 与其他系统的SSO

3-2 数据库设计 (数据库对应的模式描述)

  1. 用户注册 用户登录
  2. passport登录 , 从什么地方来, 到什么地方去

  3. JSESSION的共享 ,实现多服务器集群的 SSO

  4. 与其他系统的SSO

3-3 技术路线 (使用的技术路线)

  1. 用户注册 用户登录

  2. passport登录 , 从什么地方来, 到什么地方去

  3. JSESSION的共享 ,实现多服务器集群的 SSO

  4. 与其他系统的SSO

3-4 详细方案(设计与技术实现 技术细节)

  1. 用户注册 用户登录

  2. passport登录 , 从什么地方来, 到什么地方去

  3. JSESSION的共享 ,实现多服务器集群的 SSO

  4. 与其他系统的SSO

准备环境

1.配置可以共享session的tomcat

2.创建docker容器

3.上传war包 重启容器

配置可以共享session的tomcat

参考连接https://blog.csdn.net/lzc409973859/article/details/51981079

本质为替换掉tomcat默认的session管理

  1. 下载RedisSessionManager 源代码 https://github.com/jcoleman/tomcat-redis-session-manager

  2. 修改源代码 修改RedisSessionManager类中的initializeSerializer()方法

  private void initializeSerializer() throws ClassNotFoundException, IllegalAccessException, InstantiationException {
    log.info("Attempting to use serializer :" + serializationStrategyClass);
    serializer = (Serializer) Class.forName(serializationStrategyClass).newInstance();
    Loader loader = null;
    if (getContainer() != null) {
      loader = getContainer().getLoader();
    }
    ClassLoader classLoader = null;
    if (loader != null) {
    serializer.setClassLoader(classLoader);
  	}
  }
  private void initializeSerializer() throws ClassNotFoundException, IllegalAccessException, InstantiationException {
    log.info("Attempting to use serializer :" + serializationStrategyClass);
    serializer = (Serializer) Class.forName(serializationStrategyClass).newInstance();
    Loader loader = null;
    Context context = this.getContext();
    if (context != null) {
      loader = context.getLoader();
    }
    ClassLoader classLoader = null;
    if (loader != null) {
      classLoader = loader.getClassLoader();
    }
    serializer.setClassLoader(classLoader);
  }
  1. 使用idea maven 打包
<?xml version="1.0" encoding="UTF-8"?>
<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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.yuncai</groupId>
    <artifactId>build_tomcat_session_redis</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-catalina</artifactId>
            <version>8.0.33</version>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.7.2</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin> <!-- 打jar包 -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
                <configuration>
                    <!-- 源代码编译版本 -->
                    <source>1.8</source>
                    <!-- 目标平台编译版本 -->
                    <target>1.8</target>
                    <!-- 字符集编码 -->
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
  1. build_tomcat_session_redis jedis-2.7.2.jar commons-pool2-2.3.jar 拷贝到tomcat的lib文件夹下面

这里可以把这些jar放到lib的自定义文件夹。以便与docker映射。

下边是 将jar放入tomcat lib 文件夹下的 rslib文件夹的配置

  • 修改tomcat conf文件夹下catalina.properties配置文件

在==common.loader==后边添加=="${catalina.home}/lib/rslib/*.jar"==

  common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar","${catalina.home}/lib/rslib/*.jar"
  1. 修改tomcat配置 使其使用自定义SessionManager 并配置redis
  • 修改tomcat conf文件夹下 context.xml

    <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />  
    <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"  
      host="www.cyc-fund.com.cn"  
      port="16379"
      password="******"  
      database="0"
      maxInactiveInterval="300" />
    

创建docker容器

```shell