2016-03-04 51 views
0

我试图将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类,但对我来说,它看起来像该功能应该由我的应用程序类拿起。

谢谢!

回答

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

这将是巨大的,如果任何人都可以摆脱一些了解为什么这些线路会破坏安全设置。

2

您必须将注释@Configuration和@EnableWebSecurity添加到MessageSecurityWebApplicationInitializer中,并注意在春天采集它。比它应该工作。

+0

嘿谢谢。现在MessageSecurityWebApplicationInitializer的构造函数正在被调用,所以这是一个进步。我仍然看到: 为bean创建过滤器初始化器'springSecurityFilterChain'; order = 2147483647,resource = class path resource [org/springframework/security/config/annotation/web/configuration/WebSecurityConfiguration.class] 所以看起来好像过滤器没有正确设置。但是这真的很有帮助,谢谢。 – Ryan

+0

我也很好奇为什么样本不需要这些注释..? – Ryan

+1

在本教程中,SecurityConfig类用'@EnableWebSecurity'注解。该注释可以放在任何配置上,因此其效果与将其放置在MessageSecurityWebApplicationInitializer上相同。 你说得对,本教程缺少注释'@Configuration',这看起来像是一个错误。 –