Spring Security的错误消息中不需要的i18n

时间:2011-05-03 17:41:06

标签: spring spring-mvc spring-security

我遇到了Spring Security 3的问题,可能还有i18n。我使用Velocity作为我的视图模板,我在其中一个中有以下代码:

#if($SPRING_SECURITY_LAST_EXCEPTION)
    <div class="error"><p>#springMessage($SPRING_SECURITY_LAST_EXCEPTION.message)</p></div>
#end

当用户尝试登录并且他传递了错误的凭据时,页面上应该显示错误消息。问题是应用程序尝试解析语言环境'pl'中的消息,并且我收到以下异常:

org.springframework.context.NoSuchMessageException: No message found under code 'Bad credentials' for locale 'pl'.

在我的配置文件中,我没有关于i18n的任何信息,因为我根本不需要它。 我注意到可以从请求中检索有关'pl'语言环境的信息(标题Accept-Language: pl,en-us;q=0.7,en;q=0.3)。

如何忽略这一点并仅以defult语言提供页面?

2 个答案:

答案 0 :(得分:2)

如果您不想要i18n,请不要使用#springMessage$SPRING_SECURITY_LAST_EXCEPTION.message是一条消息本身,而不是消息代码,因此您需要按原样输出它(虽然我不确定Velocity中的HTML转义):

#if($SPRING_SECURITY_LAST_EXCEPTION)
    <div class="error"><p>${SPRING_SECURITY_LAST_EXCEPTION.message}</p></div>
#end 

答案 1 :(得分:0)

过去我和il8n玩得很开心。我所做的是强制spring只使用默认语言,我通过在配置文件中使用FixedLocaleResolver来完成此操作。更改默认情况下要包含的区域设置的值。

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