当用户首次点击指向我主页的链接时,如果该链接包含?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,那么我就回到原点。我想找到一种方法,通过多次登录尝试为用户保持页面为法语。非常感谢任何帮助谢谢!
答案 0 :(得分:0)
问题恰好是sessionlocaleresolver。由于登录尝试失败,每次都会创建一个新会话(我相信)。
这就是为什么cookielocaleresol工作。 Cookie已设置并保留给您的域。
我确实使用了sessionlocaleresolver并且尚未考虑过这个问题。
我看到的一种方法应该是在表单操作中包含locale参数。这可能是最简单的解决方案吗?