在现有MVC项目中设置Spring安全性的问题

时间:2016-03-04 05:50:59

标签: spring spring-mvc spring-security

我正在尝试将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类应该选择该功能。

谢谢!

2 个答案:

答案 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")

如果有人能够深入了解为什么这些线会破坏安全设置,那就太棒了。