小编Nir*_*wan的帖子

Spring security + i18n =如何让它一起工作?

我在这里的第一个问题,我将尝试具体.我是Spring的新手,我正在尝试创建一个非常简单的预订系统(但这实际上并不重要).重要的是我正在创建一些基本模板,然后我将通过真实的网页填写.应用程序适用于hibernate,mysql,我还设置了i18n和spring security.问题在于我无法改变我的语言环境.唯一有效的是改变默认值.首先,我浏览了Web A LOT,我发现使用i18n和弹簧安全性通常更复杂.我发现的是我需要额外的过滤器:

<filter>
    <filter-name>localizationFilter</filter-name>
    <filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>localizationFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)

我发现这个过滤器确实在安全过滤器之前处理过,但是它没有以一种形式解析请求:http://someserver.com/bla/home?locale=en.我调试了它,它似乎不是为了这个目的而创建的(这就是我需要的).这是从春季样本"联系人"中获取的,但在此示例中,我找不到任何实际上针对更改语言的代码.结果是它根本不起作用.它总是尝试将语言环境更改为我的默认语言环境.好消息是,如果在调试模式下,我手动将区域设置更改为其他一个,它工作得很好,所以我心里充满希望... ;-)

然后我找到了其他方法 - 通过创建我们自己的过滤器.我所做的是合并找到的例子(不要记住作者)以及如何RequestContextFilter创建的方式.完成所有RequestContextFilter工作后- 刚刚完成解析我的请求.这是新过滤器的代码:

public class InternationalizationFilter extends OncePerRequestFilter {

@Override
public void destroy() {
    // TODO Auto-generated method stub

}


@Override
protected void doFilterInternal(final HttpServletRequest request,
        final HttpServletResponse response, final FilterChain filterChain)
        throws ServletException, IOException {
    final String newLocale = request.getParameter("locale");
    if (newLocale != null) {
        final Locale locale = StringUtils.parseLocaleString(newLocale
                .toLowerCase());
        LocaleContextHolder.setLocale(locale);
    }
    try {
        filterChain.doFilter(request, response);
    } …
Run Code Online (Sandbox Code Playgroud)

spring localization spring-mvc spring-security internationalization

6
推荐指数
1
解决办法
1万
查看次数