Spring Boot + Spring Security +自定义过滤器(siteminder) - 无限循环

时间:2014-11-10 19:00:21

标签: spring spring-security spring-boot

我正在尝试为Spring Boot webapp配置自定义安全筛选器。最初我将它配置为从Angular JS自定义表单登录,但现在我试图分离该配置并实现Siteminder SSO过滤器。我正在使用Spring提供的RequestHeaderAuthenticationFilter。我也会发布配置。但是当我添加这个配置时,当我在服务器启动后拉起我的webapp时,它会进入无限循环。这是无限循环。如果您想查看其他配置或详细信息,请告诉我,但这一周以来一直困扰着我。任何帮助将不胜感激。谢谢!

======================Infinite Loop Start=========================

[ERROR] org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/mpe].[dispatcherServlet] - Servlet.service() for servlet dispatcherServlet threw exception
java.lang.StackOverflowError: null
    ====================================624 Times Start=============================================
    at javax.servlet.ServletRequestWrapper.isAsyncStarted(ServletRequestWrapper.java:390) ~[servlet-api.jar:3.0.FR]
    =====================================624 Times End============================================

    at org.apache.catalina.core.ApplicationDispatcher.unwrapRequest(ApplicationDispatcher.java:846) ~[catalina.jar:7.0.55]

    ====================================40Times Start====================
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748) ~[catalina.jar:7.0.55]
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:486) ~[catalina.jar:7.0.55]
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:411) ~[catalina.jar:7.0.55]
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338) ~[catalina.jar:7.0.55]
    at org.springframework.boot.context.web.ErrorPageFilter.forwardToErrorPage(ErrorPageFilter.java:155) ~[spring-boot-1.1.3.RELEASE.jar:1.1.3.RELEASE]
    at org.springframework.boot.context.web.ErrorPageFilter.handleException(ErrorPageFilter.java:138) ~[spring-boot-1.1.3.RELEASE.jar:1.1.3.RELEASE]
    at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:108) ~[spring-boot-1.1.3.RELEASE.jar:1.1.3.RELEASE]
    at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:89) ~[spring-boot-1.1.3.RELEASE.jar:1.1.3.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) ~[catalina.jar:7.0.55]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) ~[catalina.jar:7.0.55]
    ====================================40 Times End===========================================

    ====================================Infinite Loop End============================================

2 个答案:

答案 0 :(得分:1)

无限循环是由于配置错误造成的。一些常见原因:

  • 如果您有“拒绝访问”页面,则不应使用安全过滤器保护该页面。否则,将无限调用安全筛选器。
  • 如果您正在使用JSP或其他模板技术,请检查您是否没有infinitely recursive includes

答案 1 :(得分:1)

我从堆栈跟踪中看到,Spring Boot的ErrorPageFilter涉及无限循环,并且您正在使用Spring Boot的版本1.1.3.RELEASE。 Spring Boot 1.1.5中的change was made确保其ErrorPageFilter仅针对每个请求驱动一次。您应该升级到最新版本的Spring Boot(编写本文时为1.1.8.RELEASE)。它可以完全解决您的问题,也可以让您在无限循环之后看到潜在的问题。