2013-06-14 4 views
1

스프링 웹 응용 프로그램을 만들고 있는데 스프링 보안 3.1을 사용하고 있습니다.SimpleUrlAuthenticationFailureHandler의 하위 클래스에서 지역화 된 메시지를로드하는 방법?

SimpleUrlAuthenticationFailureHandler의 하위 클래스를 만들어야합니다. 그리고 상속 방법 I는 HTTP 요청 또는 세션에로드 된 지역화 된 문자열을 설정해야

public void onAuthenticationFailure(javax.servlet.http.HttpServletRequest request, 
     javax.servlet.http.HttpServletResponse response, 
     AuthenticationException exception) 
throws IOException, 
     javax.servlet.ServletException 

에서 지역화 된 문자열을로드해야합니다.

는 이미 위의 onAuthenticationFailure 방법에서, WebApplicationContext를 사용할 수없는, 그러나 다음

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> 
    <property name="basename" value="messages"/> 
</bean> 

을 정의했다. 그리고 다음과 같은 오류

No WebApplicationContext found: not in a DispatcherServlet request? 

을 가지고 있다면 수행 onAuthenticationFailure에서 다음

WebApplicationContext ctx = RequestContextUtils.getWebApplicationContext(request); 
    Locale locale = RequestContextUtils.getLocale(request); 
    String msg = ctx.getMessage(msgCode, new Object[]{}, locale); 

어떻게 onAuthenticationFailure 위의 MessageSource를 정의 메시지를 사용할 수 있습니까?

고맙습니다.

감사합니다.

답변

3

응용 프로그램 컨텍스트를 수동으로 가져올 필요가 없습니다. 스프링이 필요한 종속성을 autowire하게하기 위해서 필요한 것은 :

@Autowire 
private MessageSource messageSource; 

보안 관련 bean은 루트 웹 어플리케이션 컨텍스트에 있습니다. 즉, messageSource 정의가 서블릿 응용 프로그램 컨텍스트가 아닌 루트 컨텍스트에 있어야합니다.

당신이 정말로 수동으로 의존성을 끌어 싶은 경우에, 당신이 사용할 수있는 (그러나 즉 불필요한 오버 헤드) : 당신의 도움에 대한

WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); 
+0

파벨, 정말 고마워요! 그것 (messageSource 방식)은 매력처럼 작동합니다. 커피 한 잔 사 줄까? 페이팔 계좌가 있습니까? – curious1

관련 문제