springSecurity分离资源服务器分析
来源:互联网 发布:手机联系淘宝人工客服 编辑:程序博客网 时间:2024/06/05 07:51
参考:https://github.com/spring-guides/tut-spring-security-and-angular-js/tree/master/vanilla
使用SpringSession实现HttpSession共享,从客户端传过来的Token到资源服务器进行Token解码这种思路简单,实现却不简单的做法在生产上应该不会去应用.主要原理看下图:
1.浏览器向UI服务器进行认证授权
2.将认证授权信息存储在Redis服务器
3.浏览器从UI获取Token(实际就是sessionId)
4.浏览器发送Token到Resource服务器获取资源
5.Resource服务器根据Token向Redis服务器获取认证授权信息
6.根据认证授权信息返回资源给浏览器
关键点分析:
在org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration#springSessionRepositoryFilter注册springSessionRepositoryFilter Bean时会使用在demo.ResourceApplication#sessionStrategy注册的HeaderHttpSessionStrategy Bean.HeaderHttpSessionStrategy Bean会被注入到springSessionRepositoryFilter Bean的httpSessionStrategy属性.
在org.springframework.session.web.http.SessionRepositoryFilter声明了SessionRepositoryRequestWrapper内部类,spring security在这里对HttpSession进行了再封装.于是在调用getSession方法,会根据httpSessionStrategy去取sessionId(常见有CookieHttpSessionStrategy和HeaderHttpSessionStrategy).
当发送请求时,会被一系列的拦截器拦截(看org.springframework.security.web.FilterChainProxy.VirtualFilterChain#doFilter),直到这个Filter为SecurityContextPersistenceFilter时,调到doFilter的SecurityContext contextBeforeChainExecution = repo.loadContext(holder);这里就会触发getSession方法.得到Session后就可以得到认证授权信息.
从UI服务器返回的响应,再次以ajax方式向Resource服务器发请求,这里就发生了跨域问题,对跨域问题,spring 4.2开始,得到了较好的支持.
发送Token是以请求头的方式发送到资源服务器的,里面还介绍了为什么不用cookie.
0 0
- springSecurity分离资源服务器分析
- 反向代理分离资源服务器分析
- 服务器资源使用分析
- 资源分离
- 资源分离
- 前后端分离,如何使用Ucloud当作静态资源服务器
- loadrunner Analysis服务器资源分析
- [置顶] SpringSecurity 源码分析一
- springSecurity源码分析---FilterInvocation类
- SpringSecurity【资源和权限加入到数据库】
- SpringSecurity
- SpringSecurity
- SpringSecurity
- springSecurity登录验证分析——AbstractUserDetailsAuthenticationProvider
- springSecurity登录验证分析——AbstractUserDetailsAuthenticationProvider
- SpringSecurity初探之认证源码分析
- SpringSecurity(五):RememberMe以及源码分析
- java web项目 图片资源与部署目录分离,设置服务器的虚拟路径
- AVI文件的读取并显示
- SSH一些问题解决
- 创建并使用多个对象
- linux c struct tm宏定义时有时报dereferencing pointer to incomplete type错误,可以将包含头文件改为#include <sys/timeb.h>
- 单向链表的实现
- springSecurity分离资源服务器分析
- Tricks(十九)—— 获得 list of lists 每一列的最大最小值
- import Tkinter的时候报错
- 大数阶乘(10000级别) 51Nod 1057
- java 继承中构造方法和类成员方法间的关系
- leetcode-Excel Sheet Column Title
- 反向代理分离资源服务器分析
- 使用TimerTask进行调度
- C/C++中static关键字的使用