2013-06-14 2 views
1

Я делаю весеннее веб-приложение, и я использую весеннюю безопасность 3.1.Как загрузить локализованные сообщения в подкласс SimpleUrlAuthenticationFailureHandler?

Мне нужно создать подкласс SimpleUrlAuthenticationFailureHandler. И мне нужно, чтобы загрузить локализованные строки в унаследованном методе

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

Мне нужно установить загруженные локализованные строки в запросе HTTP или сеансе.

Я уже определен следующий

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

Однако в указанном выше способе onAuthenticationFailure, WebApplicationContext не доступен. И я получил следующую ошибку

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

Как можно использовать сообщения, определенные в приведенном выше messageSource в onAuthenticationFailure?

Большое спасибо!

С уважением.

ответ

3

Вам не нужно получать контекст приложения вручную. Все, что вам нужно, чтобы весной autowire требуемой зависимости:

@Autowire 
private MessageSource messageSource; 

Однако следует понимать, что бобы связанные с безопасностью в контексте веб-приложений корень. Это означает, что ваше определение messageSource также должно быть в корневом контексте (не в контексте приложения сервлета).

Если вы действительно хотите, чтобы тянуть вашу зависимость вручную, вы можете использовать (но это ненужно накладные расходы):

WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); 
+0

Павел, спасибо за вашу помощь! Он (метод messageSource) работает как шарм. Могу я купить вам чашку кофе? У вас есть учетная запись PayPal? – curious1

Смежные вопросы