我正在使用Spring安全性和Spring i18n。这是我的安全配置:
<security:http access-denied-page="/denied.htm">
<security:form-login login-page="/login.htm"
authentication-failure-url="/login.htm?login_error=true" />
<security:intercept-url pattern="/denied.htm" filters="none"/>
<security:intercept-url pattern="/login.htm*" filters="none"/>
<security:intercept-url pattern="/*" access="IS_AUTHENTICATED_FULLY" />
<security:logout/>
</security:http>
除此之外,我已为数据库设置了authenticationManager
,其密码为MD5编码。安全工作就好了。我的i18n配置是:
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages" />
</bean>
从Web浏览器的HTTP请求中读取区域设置它可以正常工作,但是如果我点击页面上的链接(将?lang=hr
参数添加到当前页面),我希望它能够更改区域设置。所以当我添加它时,语言环境根本不会改变:
<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang" />
</bean>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="en"/>
</bean>
<bean id="handlerMapping" class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
<property name="interceptors">
<ref bean="localeChangeInterceptor" />
</property>
</bean>
所以我几乎没有问题。
message_en.properties
或message_hr.properties
文件中获取spring的消息。贾斯珀报告。/changePassword.htm
页面。什么是最简单的解决方案?非常感谢
答案 0 :(得分:2)
- 为什么区域设置拦截突然不起作用以及如何修复 它?
醇>
我猜:要“修复”你的本地拦截器,你应该检查,即使用户没有登录也可以调用本地拦截器。
_2。如何从java中读取用户会话的当前所选语言环境 类?
使用RequestContext.getLocale()
方法。
@see http://static.springsource.org/spring/docs/2.0.x/reference/mvc.html#mvc-localeresolver
<强>加入强>
获取本地表单请求的最佳位置(在design / architecure中)是Web控制器。如果您使用的是Spring 3.0,则可以直接获取HttpServletRequest
,如果您将此类型的参数放入Controller Request Handler方法中。但是您有更好的选择:只需在控制器处理程序方法中添加Local
参数
@see http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-arguments
_3。我需要添加一些拦截器(或类似的东西)来约束用户 使用默认密码才能工作 使用/changePassword.htm页面。什么是 最简单的解决方案?
一种方式(可能不是最简单的,一种需要文档)是为用户提供默认的密码而不是完整的priveleges(他需要设置的权限)新密码),在查询密码后,为用户提供全套权限,这使他可以完成所有其他工作。
答案 1 :(得分:2)
尝试以这种方式注册localeChangeInterceptor。它对我有用。
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang"></property>
</bean>
</mvc:interceptors>