2012-12-15 2 views
0

에 내가 + Hibernate3는 + struts2.I 아래와 같이 시도 spring3.0를 사용하여 스프링 security.Am에 기억 - 나 서비스를 구성 할 수있는 방법.구성 기억 - 나 봄 보안

의 login.jsp

<input type="checkbox" name="_spring_security_remember_me"/>remember-me 

<?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> 

의 ApplicationContext-security.xml 그러나 다야에서 아무 소용이 다른 난 내 응용 프로그램에서 구성해야합니다. 하여 XML에 다음을 추가하는 데 필요한 이미 봄에 고정 된 응용 프로그램을 만들기 위해

답변

0

: "데이터 소스"를 사용하여 해당

<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> 

참고하지 않는 "은 반드시"하지만, 실제로 JDBC 영구 토큰을 사용한다고 선언합니다. (이 경우, Spring은 PersistentTokenBasedRememberMeServices와 함께 동작한다.) 물론 데이터 소스 빈은 XML로 선언되어야한다.

documented by Spring으로, 테이블 이름 persistent_logins는 DB에 존재한다.

은 "UserDetailsService의"

는 사용자와 암호가 선언 된 UserService 콩,에 대한 심판이다. 그것은 XML에 있거나 DB를 가리킬 수 있습니다. 런타임에서

은, 봄은 쿠키라는 SPRING_SECURITY_REMEMBER_ME_COOKIE를 생성한다(). 그것은 "JSESSION"쿠키와 함께 나타납니다. 그것은 우리가 JSESSION을 (의미 우리가 브라우저를 다시 좋아, 새로운 세션을 열)은 "나를 기억"쿠키 마지막 로그인을 기억하고, 새로운 JSESSION를 생성 삭제합니다.

HTH의 :-)