Disculpe si esta pregunta se ha formulado antes, pero no he recibido una respuesta directa que me haya ayudado a resolver mi problema. Tengo una aplicación gwt que he protegido usando Spring-Security. La seguridad de primavera solo autentica al usuario y redirige a la aplicación gwt. Ahora quiero que el usuario pueda cambiar la configuración regional desde un enlace en la página de inicio de sesión, después de lo cual la configuración regional se almacenará en una cookie y se usará en la aplicación.¿Cómo habilita LocaleInterceptor para cambiar la configuración regional en la página de inicio de sesión de seguridad de primavera?
que tienen las siguientes configuraciones, en mi applicationContext.xml
<http auto-config="true">
<intercept-url pattern="/mywebapp/**" access="ROLE_USER"/>
<intercept-url pattern="/gwt/**" access="ROLE_USER"/>
<intercept-url pattern="/**/*.html" access="ROLE_USER"/>
<intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<intercept-url pattern="/login.jsp*" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<form-login login-page="/login.jsp"/>
</http>
<beans:bean id="userDetailsService"
class="com.kibet.mywebapp.server.auth.UserDetailsServiceImpl">
</beans:bean>
...
<!-- Application Message Bundle -->
<beans:bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<beans:property name="basename" value="classpath:messages" />
<beans:property name="defaultEncoding" value="UTF-8"/>
</beans:bean>
<beans:bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<beans:property name="paramName" value="lang" />
</beans:bean>
<beans:bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<beans:property name="defaultLocale" value="pt"/>
</beans:bean>
<beans:bean id="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<beans:property name="interceptors">
<beans:list>
<beans:ref bean="localeChangeInterceptor"/>
</beans:list>
</beans:property>
<beans:property name="mappings">
<beans:value>/login.jsp=userDetailsService</beans:value>
</beans:property>
</beans:bean>
Esto no parece funcionar. Tengo los archivos de propiedades locales messages_en.properties, messages_es.properties y messages_pt.properties en mi classpath. La única vez que funciona es cuando cambio la configuración regional predeterminada de los navegadores. Por lo que puedo decir, la página de inicio de sesión la genera Spring-Security y la asignación de controlador no puede interceptar la solicitud de cambio de entorno local. Si esta es la razón, ¿cómo voy a hacer esto? La ayuda es muy apreciada.
Aquí está mi código de filtro personalizado.
public class InternationalizationFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
String newLocale = request.getParameter("lang");
if (newLocale != null) {
Locale locale = StringUtils.parseLocaleString(newLocale
.toLowerCase());
LocaleContextHolder.setLocale(locale);
}
try {
filterChain.doFilter(request, response);
} finally {
LocaleContextHolder.resetLocaleContext();
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}}
Gracias @Ritesh, tienes razón, LocaleChangeInterceptor no es parte de spring-security. Lamentablemente, la aplicación de muestra incluida con spring-security no ofrece mucha ayuda. Por lo tanto, he implementado un filtro personalizado para establecer la configuración regional dentro de la cadena de filtros específicamente antes de FORM_LOGIN_FILTER. Cuando ejecuto la aplicación, puedo ver que el filtro está registrado antes de UsernamePasswordAuthenticationFilter, pero cuando intento cambiar la configuración regional, no funciona.Aquí está mi configuración de filtro personalizada ' ' –
@kibyegn Por favor, agregue el código de internationalizationFilter en la pregunta. – Ritesh
He agregado el código de filtro. –