添加“messageSource”bean 后,我在使用 CookieLocaleResolver 获取错误消息时遇到了问题,因为在 Security 之后调用了 DispatcherServlet(它会自动将其用于您的应用程序)。请参阅:http ://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#localization
我的解决方案是设置 LocalContextHolder 的自定义过滤器:
public class LocaleContextFilter extends OncePerRequestFilter {
private LocaleResolver localeResolver;
public void setLocaleResolver(LocaleResolver localeResolver) {
this.localeResolver = localeResolver;
}
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
FilterChain filterChain) throws ServletException, IOException {
// store Local into ThreadLocale
if (this.localeResolver != null) {
final Locale locale = this.localeResolver.resolveLocale(request);
LocaleContextHolder.setLocale(locale);
}
try {
filterChain.doFilter(request, response);
} finally {
LocaleContextHolder.resetLocaleContext();
}
}
}
以及 Spring Security Context 配置:
<http use-expressions="true">
<custom-filter ref="localeContextFilter" after="FIRST" />
.....
</http>
<beans:bean id="localeContextFilter" class="at.telekom.ppp.util.opce.fe.interceptor.LocaleContextFilter" >
<beans:property name="localeResolver" ref="localeResolver" /><!-- e.g.: CookieLocaleResolver -->
</beans:bean>
我希望这可以帮助其他有这个问题的人。