Day424.SpringSession&SSO单点登录 -谷粒商城

Posted 阿昌喜欢吃黄桃

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day424.SpringSession&SSO单点登录 -谷粒商城相关的知识,希望对你有一定的参考价值。

SpringSession

通过SpringSession来解决分布式之间服务Session共享问题

一、SpringBoot 整合 SpringSession

https://docs.spring.io/spring-session/docs/2.5.0/reference/html5/#samples

  • 引入依赖
	<!-- 整合 spring session 实现 session 共享-->
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>
  • application.yaml
spring:
  session:
    store-type: redis
  • 开启功能

主启动类增加注解:@EnableRedisHttpSession

  • redis配置
spring.redis.host=localhost # Redis server host.
spring.redis.password= # Login password of the redis server.
spring.redis.port=6379 # Redis server port.
  • com.achang.achangmall.auth.conf.AchangmallSessionConfig
@Configuration
public class AchangmallSessionConfig {
    @Bean
    public CookieSerializer cookieSerializer() {
        DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();
        //放大作用域
        cookieSerializer.setDomainName("achangmall.com");
        cookieSerializer.setCookieName("ACHANGSESSION");
        return cookieSerializer;
    }

    @Bean
    public RedisSerializer<Object> springSessionDefaultRedisSerializer() {//使用json存储redis,而不是默认的序列化存储
        return new GenericJackson2JsonRedisSerializer();
    }

}

二、SpringSession 核心原理

@EnableRedisHttpSession 导入 RedisHttpSessionConfiguration 配置

  • 1、给容器中添加了一个组件 RedisOperationsSessionRepository:Redis操作session,session的增删改查封装类;

  • 2、继承 SpringHttpSessionConfiguration 初始化了一个 SessionRepositoryFilter:session 存储过滤器;每个请求过来都必须经过 Filter 组件;创建的时候,自动从容器中获取到了 SessionRepository;

    • SessionRepositoryFilter:
      • 将原生的 HttpServletRequest Response 包装成SessionRepositoryRequestWrapper ResponseWrapper;包装后的对象应用到了后面整个执行链;
      • 以后获取 request.getSession(); 都会调用 wrappedRequesr.getSession(); 从SessionRepository获取;
  • 3、装饰者模式

protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
    request.setAttribute(SESSION_REPOSITORY_ATTR, this.sessionRepository);
    SessionRepositoryFilter<S>.SessionRepositoryRequestWrapper wrappedRequest = new SessionRepositoryFilter.SessionRepositoryRequestWrapper(request, response);
    SessionRepositoryFilter.SessionRepositoryResponseWrapper wrappedResponse = new SessionRepositoryFilter.SessionRepositoryResponseWrapper(wrappedRequest, response);

    try {
        filterChain.doFilter(wrappedRequest, wrappedResponse);
    } finally {
        wrappedRequest.commitSession();
    }

}

SSO-单点登录

Single Sign On 一处登陆、处处可用

参考:https://gitee.com/xuxueli0323/xxl-sso

以上是关于Day424.SpringSession&SSO单点登录 -谷粒商城的主要内容,如果未能解决你的问题,请参考以下文章

[Android开发学习] day07 &amp; day08

.~day06-07_FlinkTable&SQL

Noip 2016 Day 1 & Day 2

按日子来干活——第一个Blog Day&Happy Day

DP&图论 DAY 6 下午 考试

NOIp2016 Day1&Day2 解题报告