我试图将Spring安全性添加到现有的Spring MVC项目中。我用这个作为指导:在现有MVC项目中设置Spring安全性的问题
http://docs.spring.io/spring-security/site/docs/current/guides/html5//hellomvc.html
但是,我不能让该项目在登录屏幕显示。我复制SecurityConfig.java和MessageSecurityWebApplicationInitializer.java逐字,当我将启动日志记录到DEBUG,我看到:
o.s.b.c.e.ServletContextInitializerBeans:创建过滤器初始值设定为bean'springSecurityFilterChain'; order = 2147483647,resource = class path resource [org/springframework/security/config/annotation/web/configuration/WebSecurityConfiguration.class]
这表明MessageSecurityWebApplicationInitializer永远不会被查看。果然,如果我创建一个默认构造函数并设置一个断点,它永远不会被击中。
有趣的是,SecurityConfig.configureGlobal被调用,这看起来像应该设置登录屏幕的调用。
那么需要采取哪些步骤才能使MessageSecurityWebApplicationInitializer完成它的工作?我还是想知道,Spring是如何处理依赖注入,等等 - 这个类声明应该引起这个东西在引导过程中得到回升(我本来期望某种注解):
public class MessageSecurityWebApplicationInitializer
extends AbstractSecurityWebApplicationInitializer {
}
我不能不幸的是有着许多其他的代码,但是这是应用程序文件:
@ComponentScan(basePackages={"..."})
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class, SpringBootWebSecurityConfiguration.class})
@Configuration
public class Application extends SpringBootServletInitializer {
/**
* The main() method is required by the framework.
*
* @param args
* @throws IOException
*/
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
的一两件事,样品中,这个项目不会是MessageWebApplicationInitializer类,但对我来说,它看起来像该功能应该由我的应用程序类拿起。
谢谢!
嘿谢谢。现在MessageSecurityWebApplicationInitializer的构造函数正在被调用,所以这是一个进步。我仍然看到: 为bean创建过滤器初始化器'springSecurityFilterChain'; order = 2147483647,resource = class path resource [org/springframework/security/config/annotation/web/configuration/WebSecurityConfiguration.class] 所以看起来好像过滤器没有正确设置。但是这真的很有帮助,谢谢。 – Ryan
我也很好奇为什么样本不需要这些注释..? – Ryan
在本教程中,SecurityConfig类用'@EnableWebSecurity'注解。该注释可以放在任何配置上,因此其效果与将其放置在MessageSecurityWebApplicationInitializer上相同。 你说得对,本教程缺少注释'@Configuration',这看起来像是一个错误。 –