- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Spring Security 3.1.0 和 Spring MVC 3.1.1。我希望能够根据 URL 更改区域设置,即:
http://localhost:8080/abc?lang=fr
现在,这在“正常”情况下有效,即从一个页面转到另一个页面,但是,在我的应用程序中,如果我从非安全页面转到安全页面,它首先会访问我的登录页面,由Spring Security 在到达我想要的页面之前。
这是正常的 Spring Security 行为(拦截安全资源),因此这种行为没有问题。
问题在于,当我到达安全页面时,区域设置没有改变!它保留为默认区域设置。即 ..e lang=fr 未解析出来。
我已经在dispatcher-servlet.xml 内部和外部在应用程序上下文文件中定义了与区域设置相关的bean,以执行以下操作:
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" p:paramName="lang" />
</mvc:interceptors>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" p:defaultLocale="en" />
我还尝试拆分上述 2 个 bean,在应用程序上下文配置中只包含 localResolver。
我对此进行了大量的研究,基本上,我知道我需要手动更改区域设置。
甚至 Spring Security 3.1.0 的 Spring 文档也说您需要自己的“过滤器”,或者可以使用 RequestContextFilter。但是,RequestContextFilter 不会解析查询字符串中的区域设置参数。
Spring Security relies on Spring's localization support in order to actually lookup
the appropriate message. In order for this to work, you have to make sure that the
locale from the incoming request is stored in Spring's
org.springframework.context.i18n.LocaleContextHolder. Spring MVC's DispatcherServlet
does this for your application automatically, but since Spring Security's filters are
invoked before this, the LocaleContextHolder needs to be set up to contain the correct
Locale before the filters are called. You can either do this in a filter yourself
(which must come before the Spring Security filters in web.xml) or you can use
Spring's RequestContextFilter.
我想在请求到达 Controller 之前拦截该请求,因此,我编写了自己的过滤器。
基于其他人所做的事情,我的解决方案是 Autowiring LocaleResolver。当 tomcat 启动时,它在我的日志中显示“localeResolver”已 Autowiring (否则应用程序将在那里失败)但是在运行时,localeResolver 为 NULL。
再次,有帖子说要在应用程序上下文中定义 LocaleResolver...我已经这样做了,但当请求发生时我仍然得到一个 null LocaleResolver。
有什么想法吗?非常感谢。
附:我定义的过滤器位于 Spring Security 过滤器之前。我可以调试它,它首先命中它,然后由于 LocaleResolver 上的 NPE 而死掉。
感谢这个,谢谢。
最佳答案
您是否在 web.xml 中定义了过滤器?如果是这样,那么该过滤器类不是由 Spring 实例化的,而是由 servlet 容器实例化的。 Spring 无法 Autowiring 它不知道的内容。
这里的一般解决方案是声明 <filter-class>
在 web.xml 中为 org.springframework.web.filter.DelegatingFilterProxy
并指向targetBeanName
在您的上下文中的 bean 处,例如:
<filter>
<filter-name>My Locale Filter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetBeanName</param-name>
<param-value>myLocaleFilter</param-value>
</init-param>
</filter>
在 Spring 上下文中,<bean id="myLocaleFilter">
应该指向您的 Filter 类。
您可能还会发现自定义 Filter 类扩展 GenericFilterBean
很方便而不是实现 Filter
直接接口(interface)。
关于spring - 过滤器 null 中的 LocaleResolver 仍显示它已 Autowiring ! Spring MVC 3.1.1/Spring 安全 3.1.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10301291/
这更像是一个最佳实践类型的问题。 我听过很多次: a) 在 Spring 中 Autowiring 时,最佳做法是 Autowiring 接口(interface)“而不是”实现。 和.. b) 我还
我正在查看工作区中的一些旧示例。我看不出怎么样由于没有 @Autowired, Autowiring 完成。 Spring boot + facebook 默认配置。 @Controller @Req
事实似乎并非如此。我曾经认为 XML 配置是为了覆盖注释。但是当我在XML配置中设置autowire =“no”时,bean的@Autowired注释属性仍然有效。我不再确定 XML autowire
为什么需要 Autowiring ? Autowiring 概念的解释是什么?@autowired Spring Framework 中的注释. 最佳答案 不需要 Autowiring ,只是方便。
来自this Spring documentation我知道当我使用@Bean时,默认值已经相当于: @Bean(autowire = Autowire.NO) (Default) No autowi
遇到了一个奇怪的要求。我需要将唯一的错误 ID 附加到 log4j 消息并将该消息 ID 返回给接口(interface)。所以,我虽然让我们创建一个 spring 服务,就像这样 public cl
这个问题已经有答案了: @Autowire failing with @Repository (3 个回答) 已关闭 4 年前。 我有一个类“ReportEverythingForm”,它拒绝通过自动
我是 Spring 的新手。我正面临 Spring-Boot 的问题。我正在尝试将一个字段从外部配置文件 Autowiring 到一个 Autowiring 的 bean 中。我有以下类(class)
我有一个带有存储库的 Spring Boot 应用程序。 我还使用@Service并扩展其中的存储库。 当我尝试 @Autowired 我拥有的服务时: Caused by: org.springfr
我有一个接口(interface)C,想要访问另外两个类中的getClassName()。访问 a.getClassName() 时,method1() 中出现异常。 public interface
我遇到了一个奇怪的问题,其中注入(inject)了 @Autowire 的 Component 在一个类中可用,但在另一个类中不可用。 我在Account和Agreement类的属性network中使
考虑以下示例代码: public class SmallCar { private CarEngine carEngine; @Autowired public SmallCa
autowire = "no"和 autowire = "default"有什么区别?如果它们相同,那么为什么我们有这 2 个选项。 最佳答案 Beans The default is "defaul
我已将项目更改为使用注释而不是 xml 文件,但这会增加应用程序部署时间。现在我正在寻找减少它的方法。 按类型 Autowiring 和按名称 Autowiring 之间有性能差异吗? 热烈欢迎任何其
我有一个与 Web 插件一起使用的 spring boot 应用程序。 在一节课中我有: package com.test.company @Component @RestController pub
我有一个可以执行某些操作的系统。该系统使用以下方法为每个对象创建一个单独的线程: stp.scheduleWithFixedDelay((EditSite) ctx.getBean("EditSite
我正在尝试自动连接存储库,但它无法工作。我已经为此苦苦挣扎了一个星期,但我似乎无法弄清楚。有趣的是,当我注释掉人员存储库的 Autowiring 时,程序可以正常工作并正确编译,但是一旦我尝试 Aut
意味着如果具有所需类型的 bean 不超过 1 个,bean 的所有字段将自动注入(inject)依赖项。 问题是当使用注解时它是如何工作的,它到底能不能工作。 我的测试表明即使我使用 @Resou
我有一个 Autowiring 其他 bean 的组件: @Component public class MyComponent { @Autowired private Enviro
这是我的类代码,其中有 @Autowired 字段: 测试A @ContextConfiguration("classpath:spring.xml") public abstract class T
我是一名优秀的程序员,十分优秀!