gpt4 book ai didi

java - Spring 不会拦截语言环境参数 + 安全性 [Java, i18n]

转载 作者:行者123 更新时间:2023-11-29 03:58:33 25 4
gpt4 key购买 nike

我同时使用 Spring security 和 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>

它可以很好地从网络浏览器的 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>

所以我有几个问题。

  1. 为什么区域设置拦截突然不起作用,如何解决?
  2. 如何从 java 类读取当前为用户 session 选择的语言环境?我有 java 类,我需要从 message_en.propertiesmessage_hr.properties 文件中获取 spring 的消息。贾斯珀报告。
  3. 我需要添加一些拦截器(或类似的东西)来限制使用默认密码的用户只能使用 /changePassword.htm 页面。最简单的解决方案是什么?

非常感谢

最佳答案

  1. Why the locale interception suddenly doesn't work and how to fix it?

我想:要“修复”您的本地拦截器,您应该检查即使用户未登录也可以调用本地拦截器。

_2. How to read the current chosen locale for user's session from java class?

使用 RequestContext.getLocale() 方法。@看http://static.springsource.org/spring/docs/2.0.x/reference/mvc.html#mvc-localeresolver

已添加获取请求的本地形式的最佳位置(在设计/架构中)是 Web Controller 。如果您使用的是 Spring 3.0,则可以直接获取 HttpServletRequest,前提是您将这种类型的参数放入您的 Controller 请求处理程序方法中。但是您有更好的选择:只需将 Local 参数添加到您的 Controller 处理程序方法@看http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-arguments

_3. I need to add some interceptor (or something like that) to restrain user with default password only to work with /changePassword.htm page. What is the simplest solution?

一种方法(可能不是最简单的,并且需要文档的一种方法)是为用户提供默认密码而不是全套权限(仅是他设置密码所需的权限)新密码),更改密码后,为用户提供全套权限,允许他执行所有其他操作。

关于java - Spring 不会拦截语言环境参数 + 安全性 [Java, i18n],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4930979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com