优点 : 用户身份信息独立管理,更好的分布式管理。可以自己扩展安全策略
缺点: 认证服务器访问压力较大。
优点:
无状态: token无状态,session有状态的
基于标准化: 你的API可以采用标准化的 JSON Web Token (JWT)
**缺点:**占用带宽。无法在服务器端销毁
**JWT用法: **
客户端接收服务器按一定规则生成然后返回的JWT,将其存储在Cookie或localStorage中。此后,客户端将在与服务器交互中都会带JWT。如果将它存储在Cookie中,就可以自动发送,但是不会跨域,因此一般是将它放入HTTP请求的Header Authorization字段中。当跨域时,也可以将JWT被放置于POST请求的数据主体中。
**JWT问题和趋势: **
使用cookie存储jsessionid
并设定为.gomall.com
域名下,这样所有相关的域名请求都会携带这个cookie,然后经过springsession的过滤器执行链包装成一个获取session的请求,去存储session的数据库中获取。
/**
* springsession的核心原理:
* 1:@EnableRedisHttpSession导入RedisHttpSessionConfiguration配置sessionRepository==》RedisHttpSessionConfiguration给容器中添加了一个组件:RedisIndexedSessionRepository:==》redis操作session,session的增删改查封装类
* 2:RedisHttpSessionConfiguration 继承了SpringHttpSessionConfiguration这里面有一个SessionRepositoryFilter组件==》filiter:session存储过滤器:每个请求过来都必须经过filiter
* 1:创建的时候,就自动从容器中获取到了sessionRepository
* 2:SessionRepositoryFilter类里面调用了doFilterInternal方法==》原始的request,response都被这个方法包装成了SessionRepositoryRequestWrapper SessionRepositoryResponseWrapper
* 3:以后获取session。request.getSession
* 4:wrappedRequest.getSession()===>SessionRespository中获取到
* 装饰者模式
* 自动延期,redis中的数据也是有过期时间的
**/
@EnableRedisHttpSession
@Configuration
public class GomallSessionConfig {
@Bean
public CookieSerializer cookieSerializer() {
DefaultCookieSerializer serializer = new DefaultCookieSerializer();
serializer.setCookieName("GOSESSION"); // 设置cookie名字
serializer.setDomainName("gomall.com"); // 指定域名
return serializer;
}
@Bean
public RedisSerializer<Object> springSessionDefaultRedisSerializer() {
return new GenericJackson2JsonRedisSerializer();
}
}
本文由 阿俊 创作,如果您觉得本文不错,请随意赞赏
采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
原文链接:https://jinterest.cn/archives/4-单点登录社交登录springsessionmd
最后更新:2020-12-30 17:23:18
Update your browser to view this website correctly. Update my browser now