我知道在DispatcherServlet之外使用请求范围bean需要一些配置,并且已经阅读了http://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/beans.html#beans-factory-scopes-oth,但是还没有成功:
对于Servlet3.0+,这可以通过WebApplicationInitializer接口以编程方式完成。
(我正在使用最新的Tomcat,Servlet3+)
我已经尝试使用RequestContextListener和RequestContextFilter(文档说它们和DispatcherServlet执行完全相同的操作),但在这两种情况下,我仍然会出现错误,因为我的autowired对象为null:
我尝试注册筛选器
@Configuration
@ComponentScan
@EnableAutoConfiguration
class Application extends SpringBootServletInitializer {
@Override protected SpringApplicationBuilder configure( SpringApplicationBuilder application ) {
application.sources( Application )
}
@Override public void onStartup( ServletContext servletContext ) throws ServletException {
super.onStartup( servletContext )
servletContext.addFilter("requestContextFilter", new RequestContextFilter() ).addMappingForUrlPatterns(null, false, "/*")
}
我尝试注册监听器
@Configuration
@ComponentScan
@EnableAutoConfiguration
class Application extends SpringBootServletInitializer {
@Override protected SpringApplicationBuilder configure( SpringApplicationBuilder application ) {
application.sources( Application )
}
@Override public void onStartup( ServletContext servletContext ) throws ServletException {
super.onStartup( servletContext )
servletContext.addListener( new RequestContextListener() )
}
http.addFilterBefore( new PreAuthFilter(), BasicAuthenticationFilter )
正如更新/评论中详细描述的那样,这是我自己的愚蠢造成的。
Spring-Boot能够将请求/会话作用域bean自动转换到DispatcherServlet
之外的过滤器中。根据Spring的文档,我们需要添加RequestContextListener
或RequestContextFilter
来启用此功能:
为了在请求、会话和全局会话级别支持bean的范围(Web范围bean),在定义bean之前需要进行一些次要的初始配置。(标准作用域、单例和原型不需要这个初始设置。)...
@Bean public RequestContextListener requestContextListener(){
return new RequestContextListener();
}
如果您没有注册该bean,您将得到一个错误,说明您试图访问DispatcherServlet之外的请求范围。
我遇到的问题(autowired对象只是没有被注入)是由于我只是将自定义过滤器注册为标准类实例,而不是Spring托管bean造成的:
http.addFilterBefore( new PreAuthFilter(), BasicAuthenticationFilter )
为了解决这个问题,我只需将preauthfilter
的创建移到一个sepearte@bean
方法中,@autowired
功能就可以正常工作了。
我在学习Spring Boot时遇到了一些编码问题;我想添加一个像Spring3.x那样的CharacterEncodingFilter。就像这样:
<dependencyManagement> <dependencies> <dependency> <!--Import dependency management from SpringBoot--> <groupId>org.springframework.boot</groupId>
问题内容: 我正在尝试使用Maven 3 在Spring Boot应用程序中设置活动配置文件。在我的pom.xml中,将默认的活动配置文件和属性spring.profiles.active设置 为development: 但是每次我运行应用程序时,都会在日志中收到以下消息: 并且将SpringBoot配置文件设置为默认值(读取application.properties而不是application
null 非常感谢你的帮助
我试图在使用Maven3的Spring Boot应用程序中设置一个活动概要文件。 在我的pom.xml中,我将默认的活动概要文件和属性Spring.profiles.active设置为development: 但是每次运行我的应用程序时,我都会在日志中收到以下消息: 并且SpringBoot配置文件设置为default(读取application.properties,而不是application
我有教育问题: 存在具有windows server 2003(AD)的虚拟机,其中包含用户及其密码。已建立与机器的连接(ip:192.168.56.101:389)。 Web应用程序的目的是使用户能够在AD中更改他的密码。 问题:无法配置到windws server 2003的连接。 我从这个教程开始https://spring.io/guides/gs/authenticating-ldap/