- 浏览: 586333 次
- 性别:
- 来自: 成都
-
文章分类
最新评论
-
a1641693970:
还不错,学习了
BeanUtils使用总结(二)LazyDynaBean -
zjfshowtime:
很好的办法,学习了。
ORA-28001: the password has expired -
ya654277yo:
哦,多谢分享
Apache整合Tomcat后get方式提交中文乱码问题解决 -
foolkeeper:
nice !!
jvm内存参数设定 -
tracy821:
谢谢了,找了好久才找到
关于Spring 声明式事务处理时,throws exception不回滚的问题
网上很多文章是关于Spring Security 2实现多页面登录的。因为现在需要使用Spring Security 3.x来实现所以只能自己动手解决。参考了网上这两篇文章《spring security 2中使用通过自定义过滤器实现多登录页面》和《spring security 全配置》。总的来说Security 2 和 3还是有不小差别的。
现在开始进入正题。同样使用《spring security 2中使用通过自定义过滤器实现多登陆页面》中的那几个问题。
问题:
对于多登录界面,要求实现不同的用户,比如前台用户和后台用户,分别在以下情况中实现到不同页面的转向:
1、在未登录时,访问受限页面
2、在登录以后,转向到不同的默认页面,比如前台用户转向到个人中心主页,后台用户转向到后台管理页面的首页。
3、在登录失败时,导向到错误页面。
4、在注销登录时,不同的用户转向到不同的注销成功界面。
第一个问题,因为Spring Security会通过AuthenticationEntryPoint来实现未登录用户访问被保护资源时自动跳转到登录页面,所以我们这里需要的就是扩展AuthenticaitonEntryPoint。
首先修改配置文件,如下:
<http entry-point-ref="loginPageEntryPoint">
<intercept-url pattern="/login.**" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<intercept-url pattern="/admin/login.**" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<intercept-url pattern="/admin/**" access="ROLE_ADMIN"/>
<intercept-url pattern="/**" access="ROLE_USER"/>
……
<beans:bean id="loginUrlEntryPoint" class="cn.csdn.blog.loafap.security.LoginUrlEntryPoint"></beans:bean>
注意<http> 的配置,因为我们要通过自定义过滤器来实现,所以这里去掉auto-config="true"这个属性。
LoginUrlEntryPoint.java内容如下:
public class LoginUrlEntryPoint implements AuthenticationEntryPoint {
public void commence(HttpServletRequest request, HttpServletResponse response,
AuthenticationException authException) throws IOException, ServletException {
String targetUrl = null;
String url = request.getRequestURI();
if(url.indexOf("admin") != -1){
//未登录而访问后台受控资源时,跳转到后台登录页面
targetUrl = "/admin/login.jsp";
}else{
//未登录而访问前台受控资源时,跳转到前台登录页面
targetUrl = "/login.jsp";
}
targetUrl = request.getContextPath() + targetUrl;
response.sendRedirect(targetUrl);
}
}
以上就实现了问题一的解决。
第二、三问题, 在进行表单认证的时候,UsernamePasswordAuthenticationFilter 是验证执行机制的过滤器,这与Spring Security2.x 不同,spring security2.x 用的是AuthenticationProcessingFilter 过滤器。在Spring Security3.x中已不推荐使用AuthenticationProcessingFilter 过滤器啦。这里我们对比Spring Security2.x来看看。
Spring Security 2.x的配置:
<!-- 验证前台用户 -->
<bean id="loginFilter"
class="org.springframework.security.ui.webapp.AuthenticationProcessingFilter">
<sec:custom-filter before="AUTHENTICATION_PROCESSING_FILTER" />
<property name="authenticationManager" ref="authenticationManager" />
<property name="authenticationFailureUrl" value="/login.jsp?error=true" />
<property name="defaultTargetUrl" value="/login.jsp?error=true" />
<property name="alwaysUseDefaultTargetUrl" value="true" />
<property name="filterProcessesUrl" value="/login" />
</bean>
<!-- 验证后台用户 -->
<bean id="adminLoginFilter"
class="org.springframework.security.ui.webapp.AuthenticationProcessingFilter">
<sec:custom-filter position="AUTHENTICATION_PROCESSING_FILTER" />
<property name="authenticationManager" ref="authenticationManager" />
<!-- 认证错误页面,已经被覆盖,由urlStrategy决定-->
<property name="authenticationFailureUrl" value="/admin/login.jsp?error=true" />
<!-- 认证成功页面-->
<property name="defaultTargetUrl" value="/admin/main.jsp" />
<property name="alwaysUseDefaultTargetUrl" value="true" />
<property name="filterProcessesUrl" value="/admin/login" />
</bean>
Spring Security 3.x的配置:
<!-- 验证前台用户 -->
<beans:bean id="loginFilter"
class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">
<beans:property name="authenticationManager" ref="authenticationManager"/>
<beans:property name="authenticationFailureHandler" ref="failureHandler"/>
<beans:property name="authenticationSuccessHandler" ref="successHandler"/>
<beans:property name="filterProcessesUrl" value="/login"/>
</beans:bean>
<beans:bean id="failureHandler"
class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">
<beans:property name="defaultFailureUrl" value="/login.jsp?error=true" />
</beans:bean>
<beans:bean id="successHandler"
class="org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler">
<beans:property name="alwaysUseDefaultTargetUrl" value="true"/>
<beans:property name="defaultTargetUrl" value="/main.jsp"/>
</beans:bean>
<!-- 验证后台用户 -->
<beans:bean id="adminLoginFilter"
class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">
<beans:property name="authenticationManager" ref="authenticationManager"/>
<beans:property name="authenticationFailureHandler" ref="adminFailureHandler"/>
<beans:property name="authenticationSuccessHandler" ref="adminSuccessHandler"/>
<beans:property name="filterProcessesUrl" value="/admin/login"/>
</beans:bean>
<beans:bean id="adminFailureHandler"
class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">
<beans:property name="defaultFailureUrl" value="/admin/login.jsp?error=true" />
</beans:bean>
<beans:bean id="adminSuccessHandler"
class="org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler">
<beans:property name="alwaysUseDefaultTargetUrl" value="true"/>
<beans:property name="defaultTargetUrl" value="/admin/main.jsp"/>
</beans:bean>
对比一下是不是就能看出很明显的差别啦,感觉Spring Security3.x的配置要比2.x写的多了些,还是2.x配置项写的少些。
第四个问题,我们也是通过定义两个LogoutFilter来实现。这个和Spring Security2.x配置差不多,只是过滤器实际中在<http>中注册的,而不是直接在<bean>里注册。
<!-- 注销过滤器,完成前台用户注销时的定向功能 -->
<beans:bean id="logoutFilter" class="org.springframework.security.web.authentication.logout.LogoutFilter">
<beans:constructor-arg value="/login.jsp" />
<beans:constructor-arg>
<beans:list>
<beans:bean class="org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler" />
</beans:list>
</beans:constructor-arg>
<beans:property name="filterProcessesUrl" value="/logout" />
</beans:bean>
<!-- 注销过滤器,完成后台用户注销时的定向功能 -->
<beans:bean id="adminLogoutFilter" class="org.springframework.security.web.authentication.logout.LogoutFilter">
<beans:constructor-arg value="/admin/login.jsp" />
<beans:constructor-arg>
<beans:list>
<beans:bean class="org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler" />
</beans:list>
</beans:constructor-arg>
<beans:property name="filterProcessesUrl" value="/admin/logout" />
</beans:bean>
上面改用到的过滤器我们都配置完成啦,现在我们在<http>中配置我们所需要的这4个过滤器,这点和2.x的配置是不同的。
<http entry-point-ref="loginUrlEntryPoint">
<intercept-url pattern="/login.**" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<intercept-url pattern="/admin/login.**" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<intercept-url pattern="/admin/**" access="ROLE_ADMIN"/>
<intercept-url pattern="/**" access="ROLE_USER"/>
<!-- 登录过滤器 -->
<custom-filter before="FORM_LOGIN_FILTER" ref="loginFilter"/>
<custom-filter position="FORM_LOGIN_FILTER" ref="adminLoginFilter"/>
<!-- 注销过滤器 -->
<custom-filter before="LOGOUT_FILTER" ref="logoutFilter"/>
<custom-filter position="LOGOUT_FILTER" ref="adminLogoutFilter"/>
</http>
注意Spring Security2.x中的AUTHENTICATION_PROCESSING_FILTER在Spring Security3.x中已被FORM_LOGIN_FILTER替换。
转至:http://zhousl.koo.blog.163.com/blog/static/7136380420113208174680/
发表评论
-
Spring 多数据源声明式事务控制(PlatformTransactionManager )
2014-04-11 18:31 4770首先是TransactionManager的配置: ... -
Spring 动态数据源(AbstractRoutingDataSource )
2014-04-11 18:25 1717Spring动态配置多数据源,即在大型应用中对数据进行横向 ... -
Spring 中集成 JOTM 配置 JTA 事务
2011-12-27 19:52 1633Spring 中集成 JOTM 配置 JTA 事务: ... -
Spring 3.1整合EhCache
2011-08-29 16:42 1488Spring 3.1提供了对cache的� ... -
spring集成xfire教程
2011-04-02 15:20 1626配置web.xml <!-- SPRING ... -
关于Spring 声明式事务处理时,throws exception不回滚的问题
2010-09-29 23:31 9047前一段时间,项目代码评审,发现有TX不使用Spri ... -
iBatis SqlMap 的配置总结 收藏
2010-07-22 14:30 3797核心提示:SqlMap的配� ... -
ibatis oscache 使用中miss cache
2010-06-10 13:17 2930原始配置信息: <cacheModel id=&quo ... -
ibatis oscache配置以及【文件名、目录名或卷标语法不正确】错误解决
2010-05-26 13:13 3455sqlmap-config.xml 配置如下: < ... -
Hibernate+ehcache二级缓存技术
2010-02-01 20:57 9671、首先设置EhCache,建立配置文件ehcache.XML ... -
Hibernate的缓存讨论
2010-02-01 20:50 1160一般系统中有三种情况� ... -
OpenSessionInView Filter 但是发现不生效(转载)
2010-01-25 15:35 1838今天有一个朋友问了我一个问题,他使用的是Hibernate/S ... -
spring有三种启动方式,使用ContextLoaderServlet,ContextLoader
2010-01-19 17:25 1205spring有三种启动方式,使用ContextLoaderSe ... -
ApplicationContext和BeanFactory的关于单实例bean装载的区别
2010-01-19 17:04 1275Bean工厂延迟载入所有的Bean,直到getBean()方法 ... -
Spring AOP 学习小结(转载)
2010-01-06 21:24 1479一、AOP 概念 Joinpoint� ... -
AOP术语(转载)
2010-01-06 21:04 1083AOP术语(转载) 2009-07-16 22:12 ... -
spring Lookup方法注入(转)---cglib解决子类过多问题、重构
2010-01-06 17:33 5968“Lookup方法”可以使Spri ... -
Spring JTA应用之Atomikos配置
2010-01-05 23:17 3811Atomikos,是一个基于Java的开源事务管理器,提供了事 ... -
多对多关系中Set的查询
2010-01-05 22:27 1140多对多关系中Set的查询 一个老师教多个学生,一个学生 ... -
ibatis 使用 in子句
2009-09-28 18:44 1913因为in的性能问题,平常不怎么用。今天特殊需求,在ibatis ...
相关推荐
配置文件或类中需指定认证管理器、授权策略、登录页面、注销功能等。例如: ```java @Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired ...
在这个"spring security3.0 demo"中,开发者可能会展示如何创建用户、角色、权限,如何配置安全拦截规则,以及如何实现登录、登出功能。这个示例将帮助初学者理解Spring Security的基本用法和配置,以便在实际项目中...
Spring Security 3.0.x 提供了基于XML和基于Java的配置方式。XML配置灵活且易于理解,适合初学者;而基于Java的配置更加简洁,适合经验丰富的开发者,可以通过注解来配置安全行为。 ### 3. 身份验证...
Spring Security 3.0 是一个强大的安全框架,用于在Java应用程序中实现全面的安全管理解决方案。它专注于提供身份验证、授权和访问控制功能,确保只有经过验证的用户才能访问受保护的资源。本教程将深入探讨Spring ...
本文将详细探讨如何利用Spring Boot 3.0、Spring Security 6和Vue 3这三个技术框架,设计并实现一个现代化的前后端分离架构。通过这种架构,我们可以有效地分离前端和后端,提高系统的可维护性、可扩展性和安全性。 ...
通过以上的知识点,用户能够对Spring Security 3.0有一个全面的了解,并且能够根据这些知识开始配置和使用Spring Security,来为自己的Web应用程序提供安全性保护。随着学习的深入,用户可以对框架进行更高级的定制...
### Spring Security 3.0权限问题相关知识点 #### 一、Spring Security简介 ...通过以上知识点的学习,我们可以深入了解 Spring Security 3.0 的核心功能和配置方式,为实际项目中的安全设计提供有力的支持。
<html xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5"> <h1>Welcome, <sec:authentication property="principal.username"/></h1> ``` ##### 4. 实现方法级安全 在方法级别添加安全...
Spring Security 3.0 开始引入OAuth支持,允许与其他OAuth提供者进行集成,实现了社交登录等功能,比如通过Google、Facebook账户登录。 6. **AOP(面向切面编程)安全**: 2.0 和 3.0 都支持AOP,可以对方法级别...
当用户尝试访问未授权的资源或认证失败时,Spring Security可以抛出适当的异常,并配置自定义的错误页面或响应消息。 8. **配置灵活性** Spring Security的一大优点是其高度可配置性。通过XML或Java配置,我们...
总结来说,Spring Security 3.1的验证码自定义登录涉及验证码生成、自定义AuthenticationProvider、配置Spring Security以及可能的过滤器链扩展。这一过程旨在提升系统安全性,防止恶意登录,同时也需要考虑到用户...
教程文档`教你使用_SpringSecurity_3.0_52页.pdf`会详细指导你如何一步步配置和使用Spring Security。它应该包含了配置文件的示例、如何集成到Spring应用中、如何创建自定义认证逻辑以及如何进行授权设置等内容。...
Spring Security 3.0.1 是在 Spring Security 3.0 的基础上进行的一次 bug 修复版本,主要针对先前版本中存在的问题进行了修正。此次版本未引入新的功能,但修正了一些已知的问题,增强了稳定性。 ##### 1.4 获取 ...
本文档所指的版本为 Spring Security 3.0.1,这是一个 bug fix 版本,主要针对 3.0 版本中存在的问题进行修复,确保开发者能够获取更稳定可靠的 Spring Security 库。 **1.4 获取 Spring Security** - **项目模块*...
Spring Security 3 配置和使用 Spring Security 是一个强大且灵活的安全框架,旨在保护基于 Java 的 Web 应用程序。Spring Security 3 是 Spring Security 框架的第三个主要版本,提供了许多新的功能和改进。下面...
4. **Web表单登录增强**:提供了更方便的自定义登录页面和错误处理机制。 5. **更好的国际化支持**:增加了多语言支持,便于不同地区的用户使用。 6. **性能提升**:通过优化内部实现和缓存策略,提升了系统性能和...
标题 "spring3.0通过注解实现登录简单实例" 指向的是Spring框架3.0版本中使用注解来构建一个简单的登录功能。在这个实例中,我们将探讨如何利用Spring MVC和Spring Security这两个核心模块来完成这个任务。Spring ...
7. **国际化**:Spring Security 支持多语言环境,可以在配置中定义不同语言的安全信息。 8. **OAuth2集成**:虽然这里提到的是Spring Security 3.0,但Spring Security 4.0及更高版本增加了对OAuth2的支持。如果这...
随着 Spring 3.0 的发布,Spring Security 也迎来了重大的版本更新,正式更名为 Spring Security,并成为了 Spring 家族的一员。这个版本引入了许多新特性,包括更简洁的配置方式、更强大的认证机制以及更加灵活的...