目前我们的项目中使用基于基于FilterSecurityInterceptor过滤链对系统资web资源进行保护,升级ss3后发现原来使用的filter的SSO登录方式不再适用。
昨天研究FilterSecurityInterceptor源码发现其实这个实现其实很简单,发出来分享下。
分析:
我们一般在过滤链时使用实现AbstractSecurityInterceptor构成整个链,AbstractSecurityInterceptor的机制可以分为几个步骤:
1、事前评估--检查请求资源是否为受保护资源;
2、查找认证--当前安全上下文中是否是通过安全认证的用户;
3、认证用户--查找认证时认证失败会抛出异常来重新认证用户;
4、实施投票--获取认证用户后检查是否有资源权限。
...
原来基于表单提交认证的方式就是在认证失败后跳转认证页面进行用户认证的,我们现在要加入SSO方式直接在认证用户阶段将SSO用户加入即可。
根据源码,认证用户环节在AbstractSecurityInterceptor事前评估内部方法中,其主要访问对象为安全上下文中的Authentication对象。
因此我们在事前评估前将安全上下文中的Authentication对象替换为SSO用户。实现如下:
public void invoke(FilterInvocation filter) throws IOException, ServletException {
// 加入对SSO方式登录的判断,并进行SSO登录
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication.getPrincipal()==null||"anonymousUser".equals(authentication.getPrincipal())) {
String ssoUser = filter.getHttpRequest().getHeader("iv-user");
String ssoPassword = filter.getHttpRequest().getHeader("iv-password");
if(StringUtils.isNotBlank(ssoUser)){
authentication = new UsernamePasswordAuthenticationToken(ssoUser,
ssoPassword);
SecurityContextHolder.getContext().setAuthentication(authentication);
}
}
InterceptorStatusToken token = super.beforeInvocation(filter);
filter.getChain().doFilter(filter.getRequest(), filter.getResponse());
super.afterInvocation(token, null);
}
增加这个处理后只需在用户认证的authenticationManager认证判断通过验证。
PS:这里只是一个简单的实现,真实环境中这样的实现是不安全的,在SSO方式登录判断环节需增加一系列的安全判断多次握手匹配。
分享到:
相关推荐
4. **会话管理**:Spring Security提供了会话管理功能,可以防止会话固定攻击(Session Fixation)、实现会话超时以及单点登录(Single Sign-On, SSO)。 5. **异常处理**:当安全规则不满足时,Spring Security会...
2. **OAuth2集成**:添加OAuth2支持,允许第三方服务的单点登录(SSO)。 3. **RESTful API安全**:扩展配置以保护REST API,可能需要处理JSON Web Tokens(JWT)。 4. **角色和权限的动态管理**:实现一个后台系统,...
6. SSO(单点登录):Spring Security通过实现 CAS(Central Authentication Service)客户端,可以轻松集成到SSO环境中。 7. 会话管理:框架提供了会话固定保护,防止会话劫持攻击。此外,还可以设置会话超时和...
单点登录(Single Sign-On, SSO)** - **13.1 配置JA-SIG** - 配置JA-SIG CAS服务器。 - **示例代码**: 配置CAS服务器。 - **13.2 配置Spring Security** - 配置Spring Security来支持SSO。 - **示例代码**: 在...
6. **Session Management**:Spring Security提供了强大的会话管理功能,可以防止会话固定攻击,实现会话超时检测,并支持单点登录(SSO)等高级功能。 7. **Exception Translation**:Spring Security将安全相关的...
通过上述章节的学习,我们可以看到 Spring Security 提供了极其丰富的功能,不仅可以实现基本的认证和授权,还能实现复杂的安全需求,如单点登录、会话管理、自定义过滤器等。无论是对于初学者还是有经验的开发者来...
《Spring Security 权限管理手册》是一本深入探讨Spring Security框架的中文指南,它涵盖了Spring Security的核心概念、配置以及在实际应用中的最佳实践。作为Java开发者,理解和掌握Spring Security对于构建安全、...
《行动中的Spring安全》这本书深入探讨了Spring Security框架在实际应用中的使用,它是一个强大的Java安全解决方案,用于保护Web应用程序免受各种安全威胁。Spring Security提供了全面的安全控制,包括身份验证、...
- **单点登录(SSO)**:如果系统需要与其他应用集成,单点登录能提供统一的登录体验,减少用户登录次数。 - **权限审计**:记录用户的权限操作,便于后期的安全审查和问题排查。 在视频教程中,开发者可能会逐步...
这对于构建API服务和实现单点登录(SSO)场景非常有用。 **异常处理** Spring Security提供了统一的异常处理机制,当安全检查失败时,会抛出相应的异常,如`AccessDeniedException`表示授权失败,`...
"testTicketAuth"项目可能实现了这样的流程,为不同服务提供安全的单点登录(SSO)体验。 **Spring Security** 考虑到"testTicketAuth"是Java项目,Spring Security是一个可能被使用的强大安全框架。它提供了全面的...
3. **FilterSecurityInterceptor**:该组件用于Web应用程序的安全管理,通过过滤器链拦截HTTP请求,确保只有授权的用户才能访问资源。 #### 安全配置参数 Acegi支持多种配置选项,以适应不同的安全需求。例如,...