我正在尝试将Spring安全性添加到现有的Spring MVC项目中。我正在使用它作为指南:
http://docs.spring.io/spring-security/site/docs/current/guides/html5//hellomvc.html
但是,我无法让项目显示登录屏幕。我逐字复制了SecurityConfig.java和MessageSecurityWebApplicationInitializer.java,当我将启动日志记录转到DEBUG时,我看到了:
o.s.b.c.e.ServletContextInitializerBeans:为'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类,但对我来说,看起来我的Application类应该选择该功能。
谢谢!
答案 0 :(得分:2)
您必须将@Configuration和@EnableWebSecurity注释添加到MessageSecurityWebApplicationInitializer中,并注意它在春天之前已被选中。它应该工作。
答案 1 :(得分:0)
事实证明问题在于我的gradle构建中的这些行:
compile(group: "org.springframework.boot", name: "spring-boot-starter-actuator", version: "1.2.3.RELEASE")
compile(group: "org.springframework.boot", name: "spring-boot-starter-web", version: "1.2.3.RELEASE")
compile(group: "org.springframework.boot", name: "spring-boot-starter-test", version: "1.2.3.RELEASE")
compile(group: "org.springframework.boot", name: "spring-boot-starter-jdbc", version: "1.2.3.RELEASE")
如果有人能够深入了解为什么这些线会破坏安全设置,那就太棒了。