如何在spring security中配置remember-me服务。使用spring3.0 + hibernate3 + struts2.I尝试如下。
的login.jsp
<input type="checkbox" name="_spring_security_remember_me"/>remember-me
的applicationContext-security.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:s="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.0.3.xsd">
<description>SpringSecurity安全配置</description>
<!-- http安全配置 -->
<s:http auto-config="true" use-expressions="true" >
<s:intercept-url pattern="/css/**" filters="none" />
<s:intercept-url pattern="/img/**" filters="none" />
<s:intercept-url pattern="/js/**" filters="none" />
<s:intercept-url pattern="/account/user!save*" access="hasAnyRole('ROLE_修改用户')" />
<s:intercept-url pattern="/account/user!delete*" access="hasAnyRole('ROLE_修改用户')" />
<s:intercept-url pattern="/account/user*" access="hasAnyRole('ROLE_浏览用户')" />
<s:intercept-url pattern="/account/role!save*" access="hasAnyRole('ROLE_修改角色')" />
<s:intercept-url pattern="/account/role!delete*" access="hasAnyRole('ROLE_修改角色')" />
<s:intercept-url pattern="/account/role*" access="hasAnyRole('ROLE_浏览角色')" />
<s:form-login login-page="/login.action" default-target-url="/" authentication-failure-url="/login.action?error=true" />
<s:logout logout-success-url="/" />
<s:remember-me/>
</s:http>
<!-- 认证配置, 使用userDetailsService提供的用户信息 -->
<s:authentication-manager erase-credentials="false">
<s:authentication-provider user-service-ref="userDetailsService">
<s:password-encoder hash="plaintext" />
</s:authentication-provider>
</s:authentication-manager>
<!-- 项目实现的用户查询服务 -->
<bean id="userDetailsService" class="net.top.system.service.account.UserDetailsServiceImpl" />
</beans>
但完全没用。我还需要在我的应用程序中配置。
答案 0 :(得分:0)
为了使已经使用Spring保护的应用程序,需要将以下内容添加到XML:
<sec:http authentication-manager-ref="authenticationManager">
<sec:intercept-url pattern="/secure/**" access="ROLE_USER" />
<sec:form-login/>
<sec:custom-filter … />
<sec:remember-me
data-source-ref="dataSource"
user-service-ref="userDetailsService"/>
</sec:http>
请注意,使用“data-source”不是“必须”,但它实际上声明您要使用JDBC持久性令牌。 (在这种情况下,Spring使用PersistentTokenBasedRememberMeServices。)当然,数据源bean必须在XML中声明。
作为documented by Spring,表名称persistent_logins必须存在于DB中。
“userDetailsService”是UserService bean的引用,其中声明了用户和密码。它可以在XML中,也可以指向DB。
在运行时,Spring创建一个名为SPRING_SECURITY_REMEMBER_ME_COOKIE()的Cookie。可以看到“JSESSION”Cookie。我们删除JSESSION(意思是我们打开一个全新的会话,就像重新打开浏览器一样)“记住我”cookie记住上次登录,并创建一个新的JSESSION。
HTH: - )