系统技术-单点登录解决方案|Spring Boot使用Redis如何实现Session共享

版权声明:fromZjy QQ1045152332 https://blog.csdn.net/qq_36762677/article/details/84930357
单点登录

单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
传统session不能解决多服务器下单点登录

CAS ( Central Authentication Service ),基于Java实现的、开源SSO解决方案。cas旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 Web SSO )。

协议流程
部署+code

服务端部署

将war改名为cas.war(容易访问)部署到tomcat

初始用户名密码casuser/Mellon

  1. 修改密码:
    1.1. 选择配置文件
    在这里插入图片描述
    1.2. 添加用户名密码
    在这里插入图片描述
  2. 端口修改8080->80
    2.1 修改tomcat端口/conf/server.xml
    2.2 修改<connector port=“9100”>
    2.3 修改cas的配置文件/webapps/cas/WEB-INF
    2.4 在这里插入图片描述

客户端

  1. 引入cas客户端core依赖

Spring Boot使用Redis如何实现Session共享

pom

	<!-- 多个微服务间共享session2 -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-redis</artifactId>
		<version>1.4.6.RELEASE</version>
	</dependency>
	<dependency>
		<groupId>org.springframework.session</groupId>
		<artifactId>spring-session-data-redis</artifactId>
	</dependency>

配置类或启动类

@SpringBootApplication
//@EnableRedisHttpSession注解开启Spring session支持
//maxInactiveIntervalInSeconds参数是设置Session失效时间
@EnableRedisHttpSession(maxInactiveIntervalInSeconds=60)
public class DemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}

配置文件

############################################################
#
# REDIS 配置
#
############################################################
# Redis数据库索引(默认为0)
spring.redis.database=1
spring.redis.host=127.0.0.1
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=1234567
# 连接超时时间(毫秒)
spring.redis.timeout=5000

测试

@Controller
public class MainController {



    @RequestMapping(value="/getSessionId")
    @ResponseBody
    public String getSessionId(HttpServletRequest request){

        Object o = request.getSession().getAttribute("springboot");
        if(o == null){
            o = "spring boot 端口"+request.getLocalPort()+"生成";
            request.getSession().setAttribute("springboot", o);
        }

        return "端口=" + request.getLocalPort() +  " sessionId=" + request.getSession().getId() +"<br/>"+o;
    }

}

猜你喜欢

转载自blog.csdn.net/qq_36762677/article/details/84930357