项目需要做一个简单的SSO到我们用SpringSecurity2.0的系统,因为没有统一的用户LDAP,采用post用户名密码的方式。现在要处理的就是2件事,一是能够post通过验证,二是验证通过要跳转到指定的页面。一很好实现: http://localhost:8081/j_spring_security_check?j_username=admin&j_password=1,采用的默认配置就可以通过验证。简单看一下spring源码,AuthenticationProcessingFilter是默认filterChain中的一个,由它来处理form方式的验证,验证代码如下:
public Authentication attemptAuthentication(HttpServletRequest request) throws AuthenticationException {
String username = obtainUsername(request);
String password = obtainPassword(request);
if (username == null) {
username = "";
}
if (password == null) {
password = "";
}
username = username.trim();
UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(username, password);
// Place the last username attempted into HttpSession for views
HttpSession session = request.getSession(false);
if (session != null || getAllowSessionCreation()) {
request.getSession().setAttribute(SPRING_SECURITY_LAST_USERNAME_KEY, username);
}
// Allow subclasses to set the "details" property
setDetails(request, authRequest);
return this.getAuthenticationManager().authenticate(authRequest);
}
protected String obtainUsername(HttpServletRequest request) {
return request.getParameter(usernameParameter);
}
public static final String SPRING_SECURITY_FORM_USERNAME_KEY = "j_username";
public static final String SPRING_SECURITY_FORM_PASSWORD_KEY = "j_password";
public static final String SPRING_SECURITY_LAST_USERNAME_KEY = "SPRING_SECURITY_LAST_USERNAME";
private String usernameParameter = SPRING_SECURITY_FORM_USERNAME_KEY;
private String passwordParameter = SPRING_SECURITY_FORM_PASSWORD_KEY;
public String getDefaultFilterProcessesUrl() {
return "/j_spring_security_check";
}
url中的3个参数代码中都出现了。
第二个问题就复杂一点了,配置的默认页面是index.jsp,现在要跳转到其它页面。查不到文档,还是自己看源码。AuthenticationProcessingFilter extends了AbstractProcessingFilter,这个类有很多与配置对应的属性,一个我们需要的属性就是targetUrlResolver:
private TargetUrlResolver targetUrlResolver = new TargetUrlResolverImpl();
这里就是处理验证后的跳转,看默认的TargetUrlResolverImpl类实现:
public String determineTargetUrl(SavedRequest savedRequest, HttpServletRequest currentRequest,
Authentication auth) {
String targetUrl = currentRequest.getParameter(targetUrlParameter);
if (StringUtils.hasText(targetUrl)) {
try {
return URLDecoder.decode(targetUrl, "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new IllegalStateException("UTF-8 not supported. Shouldn't be possible");
}
}
if (savedRequest != null) {
if (!justUseSavedRequestOnGet || savedRequest.getMethod().equals("GET")) {
targetUrl = savedRequest.getFullRequestUrl();
}
}
return targetUrl;
}
这里targetUrl也是先getParameter,这意味着通过url参数指定跳转页面成为了可能
public static String DEFAULT_TARGET_PARAMETER = "spring-security-redirect";
private String targetUrlParameter = DEFAULT_TARGET_PARAMETER;
找到了这个参数,spring-security-redirect,尝试url:
http://localhost:8081/j_spring_security_check?j_username=admin&j_password=1&spring-security-redirect=draft.do
验证通过并跳转到了相应的页面,这样没有增加代码和配置就完成了,也对SpringSecurity有了直观的认识。SpringSecurity也提供其它方式的sso,等有机会再好好研究。
分享到:
相关推荐
spring security 基于oauth 2.0 实现 sso 单点登录Demo 使用 spring security 基于oauth 2.0 实现 sso 单点登录Demo spring boot + spring security + spring security oauth
Spring boot+Spring Security Oauth2.0,Sprint cloud+Spring Security Oauth2集成。四种认证方式。附带有代码,和案例,案例,还有视频链接。我保证看完就回,如果视频链接失效,评论回复我,我单独再给你一份。
Spring Security和OAuth 2.0是两个在Web应用安全领域广泛应用的框架,它们结合使用可以构建强大的单点登录(SSO)和认证授权系统。在这个系统中,`xp-sso-server`代表了认证服务器,而`xp-sso-client-a`和`xp-sso-...
使用 spring security 基于oauth 2.0 实现 sso 单点登录Demo spring boot + spring security + spring security oauth
此外,笔记中可能还涉及了Spring Security与OAuth2.0结合时的常见问题和最佳实践,例如如何处理刷新令牌以延长访问权限,如何实现单点登录(SSO),以及如何利用JWT(JSON Web Tokens)来提高性能和安全性。...
Spring Security OAuth2 与 JWT 实现的SSO详解 在当今的互联网应用中,单点登录(Single Sign-On,简称SSO)已经成为一种常见的身份验证机制,它允许用户在一个系统中登录后,无需再次登录就能访问其他关联系统。在...
在Spring WS 2.0中实现SSO,我们可以利用其强大的安全模块Spring Security。Spring Security是一个全面的权限管理框架,支持多种身份验证和授权策略。在SSO场景下,我们需要配置Spring Security来处理票据的生成、...
总的来说,实现Spring Security、Spring OAuth2和Spring MVC的SSO单点登录系统,需要对这些框架有深入理解,并正确配置相应的jar包或Maven/Gradle依赖。通过这个最小化集合,开发者可以快速搭建SSO环境,然后根据...
开发人员可以通过配置Spring Security的OAuth2模块来保护REST API、实现单点登录(SSO)或者让第三方应用接入。 3. **spring-security-oauth2-2.0.3.RELEASE-sources.jar**:这是源码JAR文件,包含Spring Security ...
SpringCloud+SpringBoot+OAuth2+Spring Security+Redis实现的微服务统一认证授权
Spring Security SAML2使得Java开发者能够轻松地在他们的应用程序中集成SAML支持,以实现单点登录(Single Sign-On, SSO)和其他企业级身份验证功能。 这个压缩包包含了"spring secrity sam2.0"的完整样例,是学习...
总的来说,Spring Security OAuth为开发者提供了一套强大且灵活的工具来实现安全的SSO和OAuth2.0认证,尽管随着Spring Security的发展,其使用方式和组件有所变化,但理解这些核心概念对于构建安全的分布式应用至关...
全网最新的Cloud 权限系统 基于Spring Boot 2.0.4.RELEASE ...基于 Spring Security oAuth 深度定制,支持社交登录等 完整的OAuth 2.0 流程,资源服务器控制权限 去除了部分对于开发不友好的中间件,快速上手
在Java开发中,Spring Security OAuth2.0框架是实现OAuth2.0授权机制的常见工具,尤其适用于构建分布式系统的单点登录(Single Sign-On, SSO)解决方案。 OAuth2.0的核心流程包括四个角色:资源所有者(Resource ...
在这个项目中,我们关注的是`cas-server-client-springsecurity.zip`,这是一个针对CAS 5.3版本的overlay工程,目的是整合MySQL数据库以及Spring Security客户端。 **CAS 5.3 版本概述** CAS 5.3是CAS的一个重要...
基于Spring Cloud、OAuth2.0的前后端分离的系统。 通用RBAC权限设计及其数据权限和分库分表 支持服务限流、动态路由、灰度发布、 支持常见登录方式, 多系统SSO登录 基于 Spring Cloud Hoxton 、Spring Boot 2.3、 ...
全网最新的Cloud 权限系统 基于Spring Boot 2.0.4.RELEASE 基于Spring ...基于 Spring Security oAuth 深度定制,支持社交登录等 完整的OAuth 2.0 流程,资源服务器控制权限 去除了部分对于开发不友好的中间件,快速上手