spring session 和 spring security整合
背景:
我要做的系统前面放置zuul。 使用自己公司提供的单点登录服务。后面的业务应用也是spring boot支撑的rest服务。
目标:
使用spring security管理权限包括权限。用户请求过来之后。自动单点登录,zuul以及后面的所有应用共享session(含权限和登录)信息。
计划:
工作分为zuul部分和rest部分
在zuu这边,我们需要
- 实现和配置filter,调用已有的单点登录服务,实现用户身份校验,权限获得。并且存入session中
- 配置spring session。确保session被持久化。在我选的方案里是redis
在rest这边
- 配置spring session。可以从redis中读取session
- 实现Filter,未登录的返回错误
zuul和rest应用都启用spring session。 从zuul打到rest上的请求自动识别为已登录的,从session中获得权限信息。业务基于权限控制。
spring默认的filter是这些。其中springSecurityFilterChain比较特殊是安全相关的一堆filter
name=metricsFilter, filterClass=org.springframework.boot.actuate.autoconfigure.MetricsFilter
name=characterEncodingFilter, filterClass=org.springframework.boot.web.filter.OrderedCharacterEncodingFilter
name=springSessionRepositoryFilter, filterClass=org.springframework.session.web.http.SessionRepositoryFilter
name=hiddenHttpMethodFilter, filterClass=org.springframework.boot.web.filter.OrderedHiddenHttpMethodFilter
name=httpPutFormContentFilter, filterClass=org.springframework.boot.web.filter.OrderedHttpPutFormContentFilter
name=requestContextFilter, filterClass=org.springframework.boot.web.filter.OrderedRequestContextFilter
name=springSecurityFilterChain, filterClass=org.springframework.boot.web.servlet.DelegatingFilterProxyRegistrationBean$1
name=webRequestLoggingFilter, filterClass=org.springframework.boot.actuate.trace.WebRequestTraceFilter
name=shallowEtagHeaderFilter, filterClass=com.gome.sso.common.filter.UserCookieCheckFilter
name=applicationContextIdFilter, filterClass=org.springframework.boot.web.filter.ApplicationContextHeaderFilter
name=Tomcat WebSocket (JSR356) Filter, filterClass=org.apache.tomcat.websocket.server.WsFilter
启用web security之后默认的一套filter是这样的。我们可以自己开发一个来替换掉BasicAuthenticationFilter
0 = {WebAsyncManagerIntegrationFilter@13209}
1 = {SecurityContextPersistenceFilter@13210}
2 = {HeaderWriterFilter@13211}
3 = {LogoutFilter@13212}
4 = {BasicAuthenticationFilter@13213}
5 = {RequestCacheAwareFilter@13214}
6 = {SecurityContextHolderAwareRequestFilter@13215}
7 = {AnonymousAuthenticationFilter@13216}
8 = {SessionManagementFilter@13217}
9 = {ExceptionTranslationFilter@13218}
10 = {FilterSecurityInterceptor@13219}
替换的代码如下。继承WebSecurityConfigurerAdapter并覆盖com.gome.cs.online.WebSecurityConfig#configure方法
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
.....
@Override
protected void configure(HttpSecurity http) throws Exception {
CustomSsoFilter ssoFilter = new CustomSsoFilter();
ssoFilter.setLoginUrl(loginUrl);
http.addFilterAfter(ssoFilter, LogoutFilter.class);
}
}
这个配置下除了没有了,连FilterSecurityInterceptor也没有了,
zuul的默认设置在转发时会删除掉这些headerCookie,Set-Cookie,Authorization。 对于我们信任的rest当然就不需要了
要进行如下设置
zuul:
routes:
users:
path: /myusers/**
sensitiveHeaders: Cookie,Set-Cookie,Authorization
serviceId: myuser-rest
好了,这样我们就实现了在zuul和其背后的应用间共享session
spring session 和 spring security整合的更多相关文章
- 实战开发,使用 Spring Session 与 Spring security 完成网站登录改造!!
上次小黑在文章中介绍了四种分布式一致性 Session 的实现方式,在这四种中最常用的就是后端集中存储方案,这样即使 web 应用重启或者扩容,Session 都没有丢失的风险. 今天我们就使用这种方 ...
- 使用Spring Session实现Spring Boot水平扩展
小编说:本文使用Spring Session实现了Spring Boot水平扩展,每个Spring Boot应用与其他水平扩展的Spring Boot一样,都能处理用户请求.如果宕机,Nginx会将请 ...
- 别再让你的微服务裸奔了,基于 Spring Session & Spring Security 微服务权限控制
微服务架构 网关:路由用户请求到指定服务,转发前端 Cookie 中包含的 Session 信息: 用户服务:用户登录认证(Authentication),用户授权(Authority),用户管理(R ...
- Re:从零开始的Spring Session(三)
上一篇文章中,我们使用Redis集成了Spring Session.大多数的配置都是Spring Boot帮我们自动配置的,这一节我们介绍一点Spring Session较为高级的特性. 集成Spri ...
- Re:从零开始的Spring Session(二)
上一篇文章介绍了一些Session和Cookie的基础知识,这篇文章开始正式介绍Spring Session是如何对传统的Session进行改造的.官网这么介绍Spring Session: Spri ...
- Re:从零开始的Spring Session(一)
Session和Cookie这两个概念,在学习java web开发之初,大多数人就已经接触过了.最近在研究跨域单点登录的实现时,发现对于Session和Cookie的了解,并不是很深入,所以打算写两篇 ...
- 通过Spring Session实现新一代的Session管理
长期以来,session管理就是企业级Java中的一部分,以致于我们潜意识就认为它是已经解决的问题,在最近的记忆中,我们没有看到这个领域有很大的革新. 但是,现代的趋势是微服务以及可水平扩展的原生云应 ...
- 转:通过Spring Session实现新一代的Session管理
长期以来,session管理就是企业级Java中的一部分,以致于我们潜意识就认为它是已经解决的问题,在最近的记忆中,我们没有看到这个领域有很大的革新. 但是,现代的趋势是微服务以及可水平扩展的原生云应 ...
- Spring Session加Redis
session是一个非常常见的概念.session的作用是为了辅助http协议,因为http是本身是一个无状态协议.为了记录用户的状态,session机制就应运而生了.同时session也是一个非常老 ...
随机推荐
- Web开发基本准则-55实录-缓存策略
续上篇<Web开发基本准则-55实录-Web访问安全>. Web开发基本准则-55实录-缓存策略 郑昀 创建于2013年2月 郑昀 最后更新于2013年10月26日 提纲: Web访问安全 ...
- 移动WEB前端开发资源整合
meta篇 1.视窗宽度 <meta name="viewport" content="width=device-width,initial-scale=1.0,m ...
- snakebar 的使用
在一次文章阅读的时候,我浏览到一篇文章关于一个新控件的使用,这个控件就是SnakeBar 该控件和Toast控件一样,在程序运行中起着提示的功能. 效果图如下: 代码如下: Snackbar.make ...
- Ext3日记文件系统为什么文件系统还会损坏?
问题提出 在我们产品使用的多种文件系统中,ext3文件系统问题的一致性问题比较突出(这里的文件系统一致性问题特指文件系统元数据的一致性,下同).比如下面2例ext3文件系统损坏案例: ...
- Leetcode Longest Common Prefix
Write a function to find the longest common prefix string amongst an array of strings. class Solutio ...
- Android入门(十):界面的布局方式及其实际应用
关于Android界面布局,网上已经有了很多非常不错的学习资料,在这里我也不班门弄斧了,推荐两篇我认为写的不错的教程,然后再重点讲一下几种布局方式的实际应用. 教程链接:①http://www.cnb ...
- 开源的一些GIS项目下载
worldwind svn地址: https://nasa-exp.svn.sourceforge.net/svnroot/nasa-exp/trunk/WorldWind dotspatial sv ...
- Win 10 文件浏览器无法打开
今天遇到个很奇怪的问题,文件浏览器File Explorer无法正常显示,点击打开后任务栏上已经显示打开了,但是屏幕上却看不到任何窗口,开始以为机子中了恶意的木马,然后就疯狂的查毒,然而并没有解决问题 ...
- 使用R语言-RStudio快捷键
控制台 功能 Windows & Linux Mac 移动鼠标到控制台 Ctrl+2 Ctrl+2 控制台清屏 Ctrl+L Command+L 移动鼠标至第一行 Home Command+L ...
- C 格式输出
1 一般格式 printf(格式控制,输出表列) 例如:printf("i=%d,ch=%c\n",i,ch); 说明: (1) “格式控制”是用双撇号括起 ...