- 浏览: 263752 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (87)
- Java (6)
- Frameworks (1)
- JavaWeb (3)
- Spring (6)
- Hibernate (26)
- Maven (2)
- Plugin (1)
- Velocity (1)
- Freemarker (1)
- Spring security (18)
- Google (5)
- Guice (5)
- rmi (1)
- Annotation (1)
- Binding (1)
- commons-fileupload (3)
- fileupload (3)
- ehcache (1)
- ApplicationContext (1)
- Resource (1)
- Validator (1)
- PropertyEditor (1)
- one-to-many (5)
- cascade (2)
- MessageSource (1)
- Serialize (1)
- Serializable (1)
- delete (1)
- delete-orphan (1)
- fetch (1)
- one-to-one (1)
- join (4)
- DomainObject (1)
- CRUD (1)
- composite-element (1)
- Hibernate ORM (14)
- dynamic-insert (1)
- dynamic-update (1)
- Search (1)
- DDD (0)
- Job (0)
- element (1)
- Unique (1)
- Group (1)
- tomcat (1)
- https (1)
- mysql (1)
最新评论
-
xurunchengof:
[url][url][url][img][img][img][ ...
Spring Security 3多用户登录实现之三 验证过滤器 -
Wind_ZhongGang:
yo8237233 写道你这样的话如果上传文件超过了50000 ...
Spring集成Commons fileupload,文件上传 -
yo8237233:
你这样的话如果上传文件超过了50000000就会报异常
Spring集成Commons fileupload,文件上传 -
zhuzhiguosnail:
Wind_ZhongGang 写道lianglaiyang 写 ...
Spring Security 3多用户登录实现一 -
曾老师:
?????
Spring Security 3用户登录实现之十 用户切换
当填写完成登录表单提交后,首先会被对应的提交表单提起的过滤器进行拦截,这里过滤器的作用就是拦截登录表单提交验证请求,并根据相应的表单信息构造对应的登录凭证,这里来看看过滤器是如何构造相应的用户凭证。
package com.template.security.filter; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * Created by IntelliJ IDEA. * User: Zhong Gang * Date: 12-11-9 * Time: 下午10:00 */ public class MultipleAuthenticationProcessingFilter extends AbstractAuthenticationProcessingFilter { private List<AuthenticationTokenResolver> tokenResolvers = new ArrayList<AuthenticationTokenResolver>(); /** * @param defaultFilterProcessesUrl the default value for <tt>filterProcessesUrl</tt>. */ protected MultipleAuthenticationProcessingFilter(String defaultFilterProcessesUrl) { super(defaultFilterProcessesUrl); } @Override public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException, IOException, ServletException { for (AuthenticationTokenResolver tokenResolver : tokenResolvers) { if (tokenResolver.support(request)) { Authentication authentication = tokenResolver.resolve(request); return this.getAuthenticationManager().authenticate(authentication); } } throw new UnsupportedOperationException("No authentication token resolver found!"); } public void setTokenResolvers(List<AuthenticationTokenResolver> tokenResolvers) { this.tokenResolvers = tokenResolvers; } }
package com.template.security.filter; import org.springframework.security.core.Authentication; import javax.servlet.http.HttpServletRequest; /** * Created by IntelliJ IDEA. * User: Zhong Gang * Date: 12-11-9 * Time: 下午10:08 */ public interface AuthenticationTokenResolver { boolean support(HttpServletRequest request); Authentication resolve(HttpServletRequest request); }
package com.template.security.filter; import com.template.utils.StringUtils; import org.springframework.security.core.Authentication; import javax.servlet.http.HttpServletRequest; /** * Created by IntelliJ IDEA. * User: Zhong Gang * Date: 12-11-9 * Time: 下午10:27 */ public abstract class AbstractAuthenticationTokenResolver implements AuthenticationTokenResolver { protected String parameterName; protected String parameterValue; protected AbstractAuthenticationTokenResolver() { } protected AbstractAuthenticationTokenResolver(String parameterName) { this.parameterName = parameterName; } @Override public boolean support(HttpServletRequest request) { String parameterValue = request.getParameter(parameterName); if (StringUtils.isEmpty(parameterValue)) { return false; } return parameterValue.equals(this.parameterValue); } @Override public abstract Authentication resolve(HttpServletRequest request); public void setParameterName(String parameterName) { this.parameterName = parameterName; } public void setParameterValue(String parameterValue) { this.parameterValue = parameterValue; } }
package com.template.security.filter; import com.template.security.authentication.token.BackendAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.List; /** * Created by IntelliJ IDEA. * User: Zhong Gang * Date: 12-11-9 * Time: 下午10:29 */ public class BackendAuthenticationTokenResolver extends AbstractAuthenticationTokenResolver { protected BackendAuthenticationTokenResolver() { super(); } @Override public Authentication resolve(HttpServletRequest request) { String username = request.getParameter("username"); String password = request.getParameter("password"); String captcha = request.getParameter("captcha"); List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(); authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN")); return new BackendAuthenticationToken(username, password, authorities, captcha); } }
package com.template.security.filter; import com.template.security.authentication.token.ForendAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.List; /** * Created by IntelliJ IDEA. * User: Zhong Gang * Date: 12-11-9 * Time: 下午10:29 */ public class ForendAuthenticationTokenResolver extends AbstractAuthenticationTokenResolver { protected ForendAuthenticationTokenResolver() { super(); } @Override public Authentication resolve(HttpServletRequest request) { String email = request.getParameter("email"); String phone = request.getParameter("phone"); List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(); authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN")); return new ForendAuthenticationToken(email, phone, authorities); } }
这里实现AbstractAuthenticationProcessingFilter接口的类MultipleAuthenticationProcessingFilter,用来根据相应的登录表单提交信息构造相应的登录用户凭证。为了实现根据前台登录表单信息构造前台用户凭证,根据后台登录表单信息构造后台用户凭证,使用了策略模式来实现,实现AbstractAuthenticationTokenResolver接口的BackendAuthenticationTokenResolver和ForendAuthenticationTokenResolver分别用来构造后台用户凭证和前台用户凭证,再来看看配置文件是如何进行配置的吧。
<beans:bean id="multipleAuthenticationProcessingFilter" class="com.template.security.filter.MultipleAuthenticationProcessingFilter"> <beans:constructor-arg value="/login/check"/> <beans:property name="tokenResolvers"> <beans:list> <beans:ref bean="backendAuthenticationTokenResolver"/> <beans:ref bean="forendAuthenticationTokenResolver"/> </beans:list> </beans:property> <beans:property name="authenticationManager" ref="authenticationManager"/> <beans:property name="authenticationSuccessHandler" ref="multipleAuthenticationSuccessHandler"/> <beans:property name="authenticationFailureHandler" ref="multipleAuthenticationFailureHandler"/> </beans:bean> <beans:bean id="backendAuthenticationTokenResolver" class="com.template.security.filter.BackendAuthenticationTokenResolver"> <beans:property name="parameterName" value="token"/> <beans:property name="parameterValue" value="backend"/> </beans:bean> <beans:bean id="forendAuthenticationTokenResolver" class="com.template.security.filter.ForendAuthenticationTokenResolver"> <beans:property name="parameterName" value="token"/> <beans:property name="parameterValue" value="forend"/> </beans:bean>
这里不论是前台登录还是后台登录,都提交到相同的地址/login/check,不过为了区分请求到底是前台登录认证还是后台登录认证,这里使用了一个名为token的请求参数来区分,当token的值为backend的时候表明是后台登录认证,当token的值为forend的时候表明是前台登录认证。
<custom-filter ref="multipleAuthenticationProcessingFilter" before="FORM_LOGIN_FILTER"/>
这段配置表明自定义的认证过滤器将在Spring Security默认的UsernamePasswordAuthenticationFilter前执行,研究UsernamePasswordAuthenticationFilter源码你就会发现平时使用到的登录认证请求地址j_spring_security_check就是被这个过滤器进行拦截并进行处理的,所以如果只是简单的登录认证,你只需要在登录页面进行一些修改就完成可以了,因为后台的处理已经完全交由Spring Security来帮我们处理了。
评论
[b][i][u][/img][/img][/img][/img][/img][/img][/img][/url][/url][/url]引用[/u][/i][/b][list] [*][url][flash=200,200][/flash][/url] [/list]
for (AuthenticationTokenResolver tokenResolver : tokenResolvers) {
if (tokenResolver.support(request)) {
Authentication authentication = tokenResolver.resolve(request);
return this.getAuthenticationManager().authenticate(authentication);
}
}
这里
<form action="/login/check?token=backend" method="post">
表示登录表单提交的地址
<beans:bean id="multipleAuthenticationProcessingFilter"
class="com.template.security.filter.MultipleAuthenticationProcessingFilter">
<beans:constructor-arg value="/login/check"/>
表示登录表单提交地址对应的处理过滤器
这里是没有对应的构造器的,完全由过滤器对登录表单提交地址进行处理
<form action="/login/check?token=backend" method="post"> 和
<beans:bean id="multipleAuthenticationProcessingFilter"
class="com.template.security.filter.MultipleAuthenticationProcessingFilter">
<beans:constructor-arg value="/login/check"/>
分别是什么意思呢?期待帮助。
发表评论
-
Spring Security 之 Session Management
2013-01-06 11:43 5612Spring Security为我们提供了Sess ... -
Spring Security 之 Digest Authentication
2013-01-04 16:22 0<?xml version=" ... -
Spring Security 之 Basic Authentication
2013-01-04 11:58 2047Spring Security实现Basic A ... -
Spring Security 3用户登录实现之十二 授权判断
2012-11-29 15:38 2250Spring Security在验证用户登录后的另 ... -
Spring Security 3多用户登录实现之十一 退出
2012-11-19 21:41 2659Spring Security的退出功能由Logou ... -
Spring Security 3用户登录实现之十 用户切换
2012-11-17 18:15 6337部分情况下用户希望能够在不知道其它用户账号及密码的 ... -
Spring Security 3多用户登录实现之九 基于持久化存储的自动登录
2012-11-17 00:40 6312Spring Security实现自动登录的基本流 ... -
Spring Security 3多用户登录实现之八 基于Cookie的自动登录
2012-11-15 22:44 11037Spring Security为我们提供了两种方式的自 ... -
Spring Security 3多用户登录实现之七 用户验证失败处理改进
2012-11-11 11:24 8982验证登录失败后的处理的常见处理是返回到登录页面,并 ... -
Spring Security 3多用户登录实现之六 用户验证后处理
2012-11-11 00:42 4232验证用户后主要有这样两种走向,一种是验证失败,一种 ... -
Spring Security 3多用户登录实现之五 验证用户凭证
2012-11-11 00:42 4969有了用户凭证后, 如何验证用户的凭证是否正确呢, 这就需 ... -
Spring Security 3多用户登录实现之四 用户凭证
2012-11-10 20:00 5111前讲讲到AuthenticationFilt ... -
Spring Security 3多用户登录实现之二 多登录界面展示
2012-11-10 19:58 9805接前讲,首先针对一个多种用户类型的登录需求,需要先 ... -
Spring Security 3多用户登录实现一
2012-11-10 19:57 5088使用Spring Security 3 来实现多种 ... -
Spring security customize password encoder
2011-07-29 22:21 2427Spring security为我们 ... -
Spring security防用户重复登录
2011-07-28 23:28 3965使用Spring security如何防止用户的重复登录呢 ... -
Spring security用户权限数据库配置
2011-07-28 22:11 6565关于安全性服务,有两个重要的概念需要理解,一是认证,即判断 ... -
Spring security HTTP Basic认证
2011-07-27 21:54 5301Spring security框架集成了多种流行的安全认证 ...
相关推荐
**Spring Security 3 多用户登录实现详解** Spring Security 是一个强大的、高度可定制的身份验证和访问控制框架,广泛应用于Java EE平台上的安全解决方案。在本文中,我们将深入探讨如何在Spring Security 3中实现...
在这个场景中,我们关注的是如何使用Spring Security实现登录验证以及在登录过程中传递参数,特别是记录并返回用户登录前的页面。我们将深入探讨这个过程,并结合MySQL数据库的使用。 首先,让我们了解Spring ...
本项目结合了SpringBoot、SpringSecurity以及JPA(Java Persistence API),实现了用户角色权限的登录认证功能。以下是关于这些技术及实现过程的详细讲解。 1. **SpringBoot**:SpringBoot简化了Spring应用的初始...
通过自定义过滤器,我们可以实现复杂的业务逻辑,比如身份验证和权限控制。 接下来,我们关注Spring Security。它是一个灵活且可扩展的安全框架,支持多种认证和授权机制。在微服务架构中,Spring Security 可以...
- **配置 web.xml**:在 web.xml 文件中配置 Spring Security 的过滤器链。 - **最小 `<http>` 配置**:使用 `<http>` 元素可以轻松地配置 HTTP 认证和授权规则。 - **自动配置**:`auto-config` 属性可以自动配置...
Spring Security 是一个强大的Java安全框架,专为Java和Spring生态系统设计,用于实现全面的身份验证、授权和服务级安全功能。在Spring Security 3版本中,它引入了许多改进和新特性,以适应不断变化的安全需求和...
### 单点登录SSO解决方案之SpringSecurity+JWT实现 #### 一、单点登录(SSO)概述 单点登录(Single Sign-On,简称SSO)是一种认证机制,允许用户仅通过一次登录就能访问同一域下的多个应用程序和服务。这种机制...
3. **过滤器链**:Spring Security的核心是其过滤器链,包括登录过滤器、CSRF保护、会话管理等。这些过滤器按照特定顺序执行,确保每个请求都经过安全检查。 4. **会话管理**:Spring Security可以实现会话固定保护...
3. **过滤器链(Filter Chain)**:Spring Security 的核心是过滤器链,它由一系列预定义的安全过滤器组成,这些过滤器处理HTTP请求并应用安全策略。例如,`HttpServletRequestWrapperFilter`用于包装请求,`...
- 它的核心组件包括过滤器链,如`DelegatingAuthenticationEntryPoint`和`RememberMeAuthenticationFilter`,这些组件协同工作以实现无状态的HTTP请求处理。 - Spring Security支持多种认证方式,如HTTP Basic、...
- Spring Security 3引入了CSRF(跨站请求伪造)防护,通过添加一个不可预测的令牌到表单提交中,防止恶意第三方发起未经授权的操作。 5. **国际化支持**: - 支持多语言界面,可以根据用户的首选语言显示错误...
总之,这个"spring security 完整项目实例"涵盖了Spring Security的核心组件和用法,包括用户管理、身份验证、权限控制、会话管理等多个方面。通过学习和实践这个项目,开发者能够深入理解Spring Security的工作原理...
4. **Filter Chain**:Spring Security通过一系列过滤器形成一个过滤链,每个过滤器都有特定的任务,如BasicAuthenticationFilter处理基本认证,RememberMeAuthenticationFilter处理记住我功能等。 5. **Session ...
`LogoutFilter`是Spring Security提供的用于处理用户注销请求的过滤器。 示例代码如下: ```xml <!-- 商户注销 --> <bean id="shopLogoutFilter" class="org.springframework.security.web.logout.LogoutFilter"> ...
Spring Security的过滤器链是一种职责链设计模式,允许用户按照特定顺序添加多个过滤器来处理请求。 b. 除了AbstractAuthenticationProcessingFilter之外,过滤器链中还包括诸如ExceptionTranslationFilter、...
3. **过滤器链**:Spring Security的核心在于其过滤器链,它拦截HTTP请求并应用安全策略。`FilterSecurityInterceptor`是其中的关键组件,负责根据配置的访问规则对请求进行处理。 4. **会话管理**:Spring ...
- Spring Security可与OAuth2结合,提供第三方服务的登录和API访问控制。 9. **国际化支持**: - 提供多语言登录提示信息,通过`MessageSource`接口实现。 在"mysecurity"压缩包中的项目,我们可以看到这些概念...
- **实现**:扩展Spring Security提供的过滤器,实现特定的安全需求。 - **示例**:IP过滤器用于限制来自特定IP地址的请求。 **高级配置** - **自定义过滤器配置**:可以针对特定场景定制过滤器的行为,如IP地址白...
标题 "Spring Security 3 与 CAS 单点登录配置 - Server" 涉及到的是在企业级应用中实现安全访问控制的重要技术。Spring Security 是一个强大的和高度可定制的安全框架,用于保护基于 Java 的 Web 应用程序。而 CAS...
同时,配置CAS过滤器以处理用户的身份验证请求。 4. **Spring Security与CAS集成**:利用`CasAuthenticationProvider`作为认证提供者,将CAS的验证结果转换为Spring Security的`Authentication`对象。此外,还需要...