多个Spring WebApplicationInitializer

时间:2018-07-26 21:52:05

标签: java spring spring-mvc servlets spring-security

在进行春季项目时,我意识到我拥有三个有效实现WebApplicationInitializer的类

public class SpringSessionInitializer extends AbstractHttpSessionApplicationInitializer

public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer 

public class AnnotationWebAppInitializer implements WebApplicationInitializer 

在查看了这三种用法之后,我发现我没有办法将它们结合起来,所以我有几个问题。

  1. 这些命令执行的顺序是否一致?
  2. 如果可以的话,可以订购它们吗?
  3. 如果没有的话,任何此类方法的主体 作为addInterceptors或ResourceResolvers,最终清除了 其他设置。

1 个答案:

答案 0 :(得分:0)

因此,感谢M.Deinum的评论,它使我找到了答案。在@Order标签周围玩耍之后,您可以通过这种机制来控制它们的加载顺序。但是第二部分是,命令确实很重要。如果您阅读了AbstractHttpSessionApplicationInitializer的文档,它指出必须在其他注册过滤器的初始化程序之前对其进行排序。它还默认将其Order设置为100。必须首先使用它的原因是它使用过滤器从缓存数据库中检索会话。例如,如果您将AbstractSecurityWebApplicationInitializer设置为50,则切换服务器时将不再进行身份验证,因为spring安全过滤器将在从数据库获取会话的过滤器之前执行。

另一方面,我删除了一个Spring-Tomcat Web Application java.lang.IllegalStateException的错误,此错误已通过使我的主初始化程序AnnotationWebAppInitializer优先于其他程序解决。