Comment activer LocaleInterceptor pour modifier les paramètres régionaux dans le ressort de sécurité de la page de login?
Pardonnez-moi si cette question a déjà été posée, mais je n'ai pas obtenu un droit de réponse qui m'a aidé à résoudre mon problème.
J'ai une application gwt que j'ai obtenu à l'aide de ressort de sécurité. Printemps de sécurité authentifie l'utilisateur et redirige vers l'application gwt. Maintenant, je veux que l'utilisateur soit en mesure de modifier les paramètres régionaux à partir d'un lien sur la page de connexion après lesquels la locale sera stocké dans un cookie et utilisés dans l'application.
J'ai les configurations suivantes, dans mon 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>
Cela ne semble pas fonctionner. J'ai les paramètres régionaux des fichiers de propriétés de messages_en.propriétés, messages_es.propriétés et messages_pt.propriétés dans mon classpath. La seule fois où ça marche, c'est quand j'ai modifier les paramètres régionaux par défaut des navigateurs.
Aussi loin que je peux dire, la page de connexion est générée par le ressort-la sécurité et le mappage de gestionnaire ne peut pas intercepter les paramètres régionaux de demande de modification. Si c'est la raison pour comment pourrais-je aller à ce sujet? L'aide est très apprécié.
Voici mon filtre Personnalisé code.
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 {
}}
OriginalL'auteur Kibet Yegon | 2011-03-09
Vous devez vous connecter pour publier un commentaire.
La
LocaleChangeInterceptor
est une partie de Spring MVC, ce qui signifie qu'ils ne viennent pas dans l'image du printemps des filtres de sécurité. Vous devez définir les paramètres régionaux de vous-même dans la chaîne de filtrage. Voir aussi Printemps de Sécurité/SEC-1527: Internationaliser l'un des exemples d'applications<custom-filter before="FORM_LOGIN_FILTER" ref="internationalizationFilter" /> </http>
Veuillez ajouter le code de internationalizationFilter dans la question.
J'ai ajouté le code de filtrage.
ok. Avez-vous des org.springframework.web.le filtre.RequestContextFilter dans web.xml?
Cette réponse ne donne pas une image complète... dans votre cas, Spring MVC n'est pas un coup de pied dans que vous le laissez Printemps de Sécurité directement aux JSP. Cependant, il est plus fréquent de l'avant à Spring MVC (certains
LoginController
) pour que la connexion est lui-même rendu via Spring MVC. Il n'est pas nécessaire pour les filtres personnalisés.OriginalL'auteur Ritesh
Merci @Ritesh pour donner la réponse.
- Vous me donner une idée pour gérer ce problème.
J'ai travaillé autour d'elle sur un autre chemin:
Déclaré le localChangeInterceptor et localeResolver mvc fichier de configuration.
Donc, nous pouvons changer les paramètres régionaux avec la demande de param "lang":
Dans la sécurité du fichier de config,j'ai fait un i18nFilter et de l'ajouter à la Chaîne de Filtre:
avec localChangeInterceptor & localeResolver,je peux changer les paramètres régionaux et enregistrer les paramètres régionaux dans la session ou un cookie.
sous localeResolver,InternationalizationFilter pourrait sauvegarder/restaurer les paramètres régionaux et de faire le changement de LocaleContextHolder locale de l'.
OriginalL'auteur cleverpig
D'abord, la clé est le LocaleResolver et oublier l'intercepteur.
Il suffit de créer un bean qui implémentent cette interface pour régler les paramètres régionaux de l'endroit où vous l'enregistrer, à titre d'exemple d'un attribut de la demande.
OriginalL'auteur Daniel De León