如何在后续失败的登录尝试中保留主页i18n

时间:2013-03-28 14:27:32

标签: spring spring-mvc internationalization spring-security

当用户首次点击指向我主页的链接时,如果该链接包含?langId = fr_FR,则该页面将以法语显示;到现在为止还挺好。如果用户尝试登录页面失败,将显示法语错误消息,这是完美的。问题是如果第二次失败尝试登录。在这种情况下,页面语言默认为英语。

我不确定如何将页面保留为法语以用于上述情况(即当初始URL包含langId = fr_FR时的任何后续请求)。我应该使用CookieLocaleResolver而不是SessionLocaleResolver吗?

该站点使用Spring Security,我已经实现了一个在Spring Security过滤器之前运行的过滤器。此过滤器将使用langId请求参数设置LocaleContextHolder。这对于初始登录尝试非常有用。发出任何其他请求,我松开了langId参数。

我可以在loadByUserName()方法中做些什么来允许我保留原来的langId?

这是解析器和拦截器的配置

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" >
 <property name="defaultLocale" value="en" />
</bean>

<mvc:interceptors>
     <bean id="localeChangeInterceptor"
        class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
        <property name="paramName" value="langId" />
    </bean>
</mvc:interceptors>

修改

使用CookieLocaleResolver而不是SessionLocaleResolver可以解决此问题。但是,如果用户禁用cookie,那么我就回到原点。我想找到一种方法,通过多次登录尝试为用户保持页面为法语。非常感谢任何帮助谢谢!

1 个答案:

答案 0 :(得分:0)

问题恰好是sessionlocaleresolver。由于登录尝试失败,每次都会创建一个新会话(我相信)。

这就是为什么cookielocaleresol工作。 Cookie已设置并保留给您的域。

我确实使用了sessionlocaleresolver并且尚未考虑过这个问题。

我看到的一种方法应该是在表单操作中包含locale参数。这可能是最简单的解决方案吗?