2010-08-08 1 views
0

다음 BeanPostProcessor 구현이 포함 된 Spring 3.0 애플리케이션을 이해하려고합니다. 이 코드는 무엇을 위해 필요합니까? UserDetailsService가 사용자 계정 정보를 가져오고 설정하는 데 충분하다고 생각했습니다.이 Spring 3.0 인증 예제에서 UserDetailsService 외에이 BeanPostProcessor가 필요한 이유는 무엇입니까?

@Service 
public class UserPassAuthFilterBeanPostProcessor implements BeanPostProcessor 
{ 

    /** 
    * The username parameter. 
    */ 
    private String usernameParameter; 

    /** 
    * The password parameter. 
    */ 
    private String passwordParameter; 

    @Override 
    public final Object postProcessAfterInitialization(final Object bean, final String beanName) 
    { 
     return bean; 
    } 

    @Override 
    public final Object postProcessBeforeInitialization(final Object bean, final String beanName) 
    { 
     if (bean instanceof UsernamePasswordAuthenticationFilter) 
     { 
      final UsernamePasswordAuthenticationFilter filter = (UsernamePasswordAuthenticationFilter) bean; 
      filter.setUsernameParameter(getUsernameParameter()); 
      filter.setPasswordParameter(getPasswordParameter()); 
     } 

     return bean; 
    } 

    /** 
    * Sets the username parameter. 
    * 
    * @param usernameParameter 
    *   the username parameter 
    */ 
    public final void setUsernameParameter(final String usernameParameter) 
    { 
     this.usernameParameter = usernameParameter; 
    } 

    /** 
    * Gets the username parameter. 
    * 
    * @return the username parameter 
    */ 
    public final String getUsernameParameter() 
    { 
     return usernameParameter; 
    } 

    /** 
    * Sets the password parameter. 
    * 
    * @param passwordParameter 
    *   the password parameter 
    */ 
    public final void setPasswordParameter(final String passwordParameter) 
    { 
     this.passwordParameter = passwordParameter; 
    } 

    /** 
    * Gets the password parameter. 
    * 
    * @return the password parameter 
    */ 
    public final String getPasswordParameter() 
    { 
     return passwordParameter; 
    } 

} 

답변

2

예, UserDetailsService이면 충분합니다.

BeanPostProcessor은 로그인 요청에서 사용자 이름과 암호 매개 변수의 이름을 변경합니다 (로그인 양식의 필드 이름). 이러한 속성은 네임 스페이스 구성을 통해 구성 할 수 없으며 이러한 속성을 사용자 지정하기 위해 BeanPostProcessors을 사용하면 못생긴하지만 꽤 일반적인 관행.

+0

죄송합니다. 바보 같은 질문이지만 매개 변수 이름이 변경되는 것을 어떻게 알 수 있습니까? –

+0

@pnut : UsernamePasswordAuthenticationFilter (http://static.springsource.org/spring-security/site/docs/3.0.x/apidocs/org/springframework/security/web/authentication/UsernamePasswordAuthenticationFilter.html)의 설명서에서 속성 그 중 하나는이 포스트 프로세서에 의해 인스턴스화 된 후에 변경됩니다. – axtavt

1

postProcessBeforeInitialization()이 방법은 사용자의 게터 및 세터 방법을 실행 완료하고 postProcessBeforeInitialization() 방법 마무리 실행되면, 객체를 초기화하고 postProcessAfterInitialization()가 실행 후에 자동 실행 BeanPostProcessor 인터페이스에서 구현된다.

이들은 라이프 사이클 방법과 비슷합니다.

관련 문제