2012-09-13 2 views

답변

0

다음과 같은 솔루션을 시도 할 수 있습니다 다른 매개 변수 추가) 우리는 로그인 폼 및 스프링 로그인 처리 필터의 스프링 표현을 사용자 정의해야합니다.

<authentication-manager alias="authenticationManager"/> 

<beans:bean id="myFilter" class="test.MyAuthenticationProcessingFilter"> 
    <custom-filter position="AUTHENTICATION_PROCESSING_FILTER" /> 
    <beans:property name="defaultTargetUrl" value="/initialize.action"/> 
    <beans:property name="authenticationFailureUrl" value="/login_failed.action"/> 
    <beans:property name="authenticationManager" ref="authenticationManager"/> 
    <beans:property name="alwaysUseDefaultTargetUrl" value="true"/> 
    <beans:property name="filterProcessesUrl" value="/perform_login"/> 
</beans:bean> 

<beans:bean id="entryPoint" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint"> 
    <beans:property name="loginFormUrl" value="/login.action"/> 
</beans:bean> 

MyAuthenticationProcessingFilter는 스프링의 org.springframework.security.ui.webapp.AuthenticationProcessingFilter 연장 요청 파라미터를 획득하고 내부 HTTP 세션을 저장 attemptAuthentication 방법 랩 여기에 구성된다. 이 클래스는 아이디어를 보여주기 위해 작성되었습니다. 더 나은 연습을 위해 사용자 이름과 암호 매개 변수에 대한 AuthenticationProcessingFilter 코드를 찾아보십시오.

공용 클래스 MyAuthenticationProcessingFilter가의 AuthenticationProcessingFilter를 확장 {당신은 알 수

@Override 
public Authentication attemptAuthentication(HttpServletRequest request) 
     throws AuthenticationException { 
    String param = request.getParameter("_spring_security_remember_me"); 

    HttpSession session = request.getSession(); 
    if (session != null || getAllowSessionCreation()) { 
     session.setAttribute("_spring_security_remember_me", param); 
    } 

    return super.attemptAuthentication(request); 
} 

} 

그 "myFilter"와 "엔트리 포인트"콩이 함께 달리 내부 요소에 의해 정의 된 매개 변수를 정의합니다. 기본 동작을 원할 때 사용합니다. 그러나 우리의 경우에는 사용자 정의 빈을 사용하므로 요소를 완전히 제거해야합니다. 이제 콩을 사용하도록 알릴 필요가 있습니다.

<http entry-point-ref="entryPoint"> 
    ... 
    <!-- no form-login here --> 
</http> 
:

<beans:bean id="myFilter" class="test.MyAuthenticationProcessingFilter"> 
    <custom-filter position="AUTHENTICATION_PROCESSING_FILTER" /> 
    ... 
</beans:bean> 

"엔트리 포인트"속성을 사용하여 전달되는 "myFilter"빈은 빈 정의 내부 소자를 사용하여 스프링 체인에 전달

0

귀하의 질문에 약간의 불확실성이 있습니다. 그렇지 않으면 스프링 보안이 작동하는 방식을 기억하는 방식이 잘못되었습니다. 봄 보안 참조 11 장을 읽고 "기억 - 나 인증"은 이런 식으로 작동

간단히 :

  • 사용자가 자신의 사용자 이름과 암호를 사용하여 성공적으로 로그인하고 나에게 체크 박스를 기억하도록 설정 한 경우를, 스프링 시큐리티는 사용자를 확인하고 사용자에게 "보내기"쿠키를 생성합니다.

  • 로그인하지 않았습니다. 사용자가 보안 페이지 (인증 필요)를 요청하면 스프링은 유효한 쿠키인지 확인합니다. 그는 로그인 페이지로 그를 전달합니다 유효한 쿠키 스프링이없는 경우 "자동으로"그를 "로그인"그에게

  • 을 페이지가 표시됩니다 이러한 쿠키 스프링 보안이있는 경우

    • (위 참조)

이 정보가 도움이되기를 바랍니다. HTTP 세션을 얻을이 필터 내부에 스프링 보안 필터 체인 2에 1. 사용자 정의 필터와 우리가 로그인 폼을 변경하면 (이 요청 매개 변수

의 값을 저장 :