security.xml
各种过滤器实战,常用九个如下
一 链之 RememberMeProcessingFilter
1。使用 ,选上remember me后,一旦页面关闭或者服务器重启,还可以记得用户的登陆状态。
<input type="checkbox" id="remember" name="j_remember_me"> Remember me
2.设置 security.xml
<!-- 记住用户登录信息 -->
<bean id="rememberMeFilter" class="org.acegisecurity.ui.rememberme.RememberMeProcessingFilter">
<property name="authenticationManager" ref="authenticationManager" />
<property name="rememberMeServices" ref="rememberMeServices" />
</bean>
<bean id="rememberMeServices" class="org.acegisecurity.ui.rememberme.TokenBasedRememberMeServices">
<property name="userDetailsService" ref="userDetailsService" />
<property name="parameter" value="j_remember_me" /> <!--与多选框名字相同-->
<property name="key" value="remember_Me" />
<property name="tokenValiditySeconds" value="31536000" /> <!--记住多长时间 ,这里是一年-->
登陆,登出中 <property name="rememberMeServices" ref="rememberMeServices" />
</bean>
<bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager">
<property name="providers">
<list>
<ref bean="rememberMeAuthenticationProvider" />
</list>
</property>
</bean>
<bean id="rememberMeAuthenticationProvider"
class="org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider">
<property name="key" value="remember_Me" />
</bean>
二 链之 RememberMeProcessingFilter 安全拦截器
<!-- 基于URL的安全拦截器 -->
<bean id="securityInterceptor"
class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">
<property name="authenticationManager" ref="authenticationManager" />
<property name="accessDecisionManager" ref="accessDecisionManager" />
<property name="objectDefinitionSource">
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/admin/**=ROLE_ADMIN <!-- 对admin目录只有Role_admin的角色可以访问-->
/user/**=ROLE_USER
</value>
</property>
</bean>
三。 链之 authenticationProcessingFilter 登陆验证
1.login.jsp
<%
String error = request.getParameter("login_error");
if(error!=null) {
out.println("<p><font color=\"red\">");
out.println(error);
out.println("</font></p>");
}
%>
<form action="j_login.do" method="POST">
Username: <input type="text" name="j_username" />
Password: <input type="password" name="j_password">
<input name="submit" type="submit" value="Login">
</form>
<!-- 验证用户身份 -->
<bean id="authenticationProcessingFilter"
class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
<property name="authenticationManager" ref="authenticationManager" />
<property name="authenticationFailureUrl" value="/login.jsp?login_error=Login%20failed." /> <!-- 失败后跳转页-->
<property name="defaultTargetUrl" value="/helloWorld.jsp" /> <!-- 成功后跳转页-->
<property name="filterProcessesUrl" value="/j_login.do" /> <!-- 重点,与action一致-->
</bean>
四。 链之 logoutFilter
<a href="j_logout.do">logout</a></p>
<bean id="logoutFilter" class="org.acegisecurity.ui.logout.LogoutFilter">
<!-- URL redirected to after logout登出后的指向页面 -->
<constructor-arg value="/helloWorld.jsp" />
<constructor-arg>
<list>
<ref bean="rememberMeServices" /> <!-- 登出后就不再记住用户的登陆了-->
<bean class="org.acegisecurity.ui.logout.SecurityContextLogoutHandler" />
</list>
</constructor-arg>
<property name="filterProcessesUrl" value="/j_logout.do" /><!-- 重点,要一致-->
</bean>
五 链之 exceptionFilter,如果用户未能被认证,AuthenticationException就会被抛出;
即使用户成功地通过了身份验证,他们仍可能不被授予访问某些受保护页面所必需的权限。这样,AcessDeniedException就会被抛出。
<!-- 处理登录异常或权限异常的Filter -->
<bean id="exceptionFilter" class="org.acegisecurity.ui.ExceptionTranslationFilter">
<!-- 出现AuthenticationException时的登录入口 -->
<property name="authenticationEntryPoint">
<bean class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint">
<property name="loginFormUrl" value="/login.jsp" />
<property name="forceHttps" value="false" /><!--为true,login.jsp页面会通过Https安全地进行显示-->
</bean>
</property>
<!-- 出现AccessDeniedException时的Handler -->
<property name="accessDeniedHandler">
<bean class="org.acegisecurity.ui.AccessDeniedHandlerImpl" />
<!-- 可选属性: property name="errorPage" value="/denied.html" -->
</property>
</bean>
六 链之 HttpSessionContextIntegrationFilter , 不知道有什么用处哪????
<!-- 从Session中获得用户信息并放入SecurityContextHolder -->
<bean id="httpSessionContextIntegrationFilter"
class="org.acegisecurity.context.HttpSessionContextIntegrationFilter" />
————————————————————————————————————
<!-- 过滤器链-->
<bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy">
<property name="filterInvocationDefinitionSource">
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/**=channelProcessingFilter
ConcurrentSessionFilter .................
httpSessionContextIntegrationFilter,
logoutFilter,
authenticationProcessingFilter,
rememberMeFilter,
AnonymousProcessingFilter,.................
exceptionFilter
,securityInterceptor
</value>
</property>
</bean>
<!-- 认证管理器--> <bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager"> <property name="providers"> <list> <ref bean="daoAuthenticationProvider" /> </list> </property> </bean> <!-- 基于DAO验证的AuthenticationProvider --> <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider"> <property name="userDetailsService" ref="userDetailsService" /> </bean> <!-- 使用内存DAO,实际应用时可用JdbcDao代替 --> <bean id="userDetailsService" class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl"> <property name="userMap"> <value> admin=password,enabled,ROLE_ADMIN,ROLE_USER test=test,enabled,ROLE_USER guest=guest,disabled,ROLE_USER </value> </property> </bean>
<!-- 决策管理器-->
<bean id="accessDecisionManager"
class="org.acegisecurity.vote.AffirmativeBased">
<property name="decisionVoters">
<list>
<bean class="org.acegisecurity.vote.RoleVoter" />
</list>
</property>
<property name="allowIfAllAbstainDecisions" value="false" />
</bean>
附件:spring的光盘\source\10Acegi\Spring_Acegi
补记:七 链之channelProcessingfilter 通道,
login.jsp=REQUIRES_SECURE_CHANNEL 有安全映射的,表明login.jsp应该通过HTTPS进行发送.
即跳到https://127.0.0.1:8443/ssh/login.jsp ,但是为什么显示出错???????是要上网吗?
<bean id="channelProcessingFilter"
class="org.acegisecurity.securechannel.ChannelProcessingFilter">
<property name="filterInvocationDefinitionSource">
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/login.jsp=REQUIRES_SECURE_CHANNEL
/**=REQUIRES_INSECURE_CHANNEL
</value>
</property>
<property name="channelDecisionManager"
ref="channelDecisionManager">
</property>
</bean>
<bean id="channelDecisionManager"
class="org.acegisecurity.securechannel.ChannelDecisionManagerImpl">
<property name="channelProcessors">
<list>
<bean
class="org.acegisecurity.securechannel.SecureChannelProcessor" />
<bean
class="org.acegisecurity.securechannel.InsecureChannelProcessor" />
</list>
</property>
</bean>
分享到:
相关推荐
"springsecurity-namespace"可能指的是Spring Security的XML命名空间配置。在Spring Security的早期版本中,使用XML配置是最常见的实践。例如,你可能会看到以下片段: ```xml **" access="hasRole('ROLE_ADMIN')...
SpringSecurity学习总结一.pdf
总结,SpringSecurity是一个功能强大的安全框架,它为开发者提供了安全Web应用的全套解决方案。通过理解并熟练运用其核心概念和组件,我们可以构建出安全、健壮的应用程序。在学习过程中,分析提供的源代码和示例将...
在"Spring Security学习总结一(补命名空间配置)"的文件中,可能涵盖了如何在Spring Security的XML配置中补充命名空间的步骤。命名空间的引入是为了简化配置,例如`<http>`元素用于配置安全拦截和访问规则,`...
本学习总结文档主要针对初学者,旨在剖析一个不安全的应用程序并阐述如何通过 Spring Security 来提升安全性。 **一、一个不安全的应用程序的剖析** 1. **安全隐患** - 缺少 URL 保护和统一的认证可能导致权限...
在“Spring Security学习总结2_2”中,我们可能涉及了对Spring Security更深入的探讨,特别是关于其核心概念和实际应用的细节。 首先,Spring Security的核心组件包括Security Context(安全上下文)、...
总结,Spring Security 3.1作为一款强大的安全框架,虽然版本较旧,但仍值得开发者深入研究。通过学习和实践,我们可以掌握如何构建安全的Web应用,并理解其背后的原理,为今后的安全开发打下坚实基础。
### Spring Security 概述与应用实践 #### 一、引言 在当今互联网时代,网络安全问题日益凸显,尤其是Web应用程序的...同时,结合实际案例的学习,能够帮助我们更好地理解和掌握Spring Security的核心概念与使用技巧。
spring security 学习总结暑假的时候在学习了Spring安全并成功运用到了项目中。在实践中摸索出了一套结合JSON +智威汤逊(JSON网络令牌)+Spring引导+ Spring Security的技术的权限方案趁着国庆假期记录一下。 内容 ...
总结起来,"springSecurityTest.zip"文件提供了一个完整的环境,让你可以动手实践Spring Security的基础用法。通过学习其中的代码、笔记和文档,你将理解Spring Security如何与Spring框架协同工作,如何设置认证和...
Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于保护基于Java的Web应用程序。...在深入学习Spring Security时,理解其核心组件和工作流程是至关重要的,这将帮助你更好地设计和实施安全策略。
在"SpringSecurity2Demo"这个项目中,我们可以预期看到以下组成部分: 1. **配置文件**: `spring-security.xml`,这是Spring Security的核心配置文件,包含了过滤器链的配置、用户认证源、授权规则等。 2. **控制...
Spring Security 是一个强大的、高度可定制的身份验证和访问控制框架,用于保护基于Java的应用程序。在本文中,我们将深入探讨Spring Security的核心概念、主要功能以及如何在实际项目中使用它。 1. **核心概念** ...