【问题标题】:Custom Spring Security filter chain returns 404自定义 Spring Security 过滤器链返回 404
【发布时间】:2016-03-08 12:39:53
【问题描述】:

我在 Grails 应用程序中实现了一个自定义 Spring Security 过滤器,我只想在用户提交登录表单时应用该过滤器。

我在配置文件中的 Spring Security 设置如下所示:

grails.plugins.springsecurity.userLookup.userDomainClassName = 'package.User'
grails.plugins.springsecurity.authority.className = 'package.Role'

grails.plugins.springsecurity.providerNames = ['anonymousAuthenticationProvider', 'apiServiceProvider']

grails.plugins.springsecurity.portMapper.httpPort = 80
grails.plugins.springsecurity.portMapper.httpsPort = 443
grails.plugins.springsecurity.secureChannel.definition = [
        '/css/**': 'ANY_CHANNEL',
        '/home/**': 'ANY_CHANNEL',
        '/images/**': 'ANY_CHANNEL',
        '/js/**': 'ANY_CHANNEL',
        '/**': 'REQUIRES_SECURE_CHANNEL'
]

grails.plugins.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true

grails.plugins.springsecurity.filterChain.chainMap = [          
        '/j_spring_security_check': 'myFilter',
        '/**': 'JOINED_FILTERS'
]

过滤器类如下所示:

class MyFilter implements Filter {

    @Override
    void init(FilterConfig filterConfig) throws ServletException {}

    @Override
    void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        filterChain.doFilter(servletRequest, servletResponse)
    }

    @Override
    void destroy() {}
}

上面是在 resources.groovy 文件中作为 Spring bean 连接起来的,如下所示:

beans = {
    myFilter (MyFilter)
    ...
}

当我导航到登录页面并在表单上按“提交”时,浏览器在应用程序中请求路径 /j_spring_security_check,过滤器开始运行(由调试器断点确定),但返回 404 错误浏览器。

配置中没有过滤器,即如果 '/j_spring_security_check': 'myFilter', 被注释掉,应用程序工作正常。

我尝试了其他 SO 问题中描述的各种解决方案,但均无济于事。

我错过了什么?

【问题讨论】:

    标签: spring grails spring-security


    【解决方案1】:

    问题很明显,现在我已经修复了...我需要在 j_spring_security_check URL 的映射条目中包含所有其他标准 Spring 过滤器。配置中的过滤器映射则变为:

    grails.plugins.springsecurity.filterChain.chainMap = [
        '/j_spring_security_check': 'myFilter,securityContextPersistenceFilter,logoutFilter,authenticationProcessingFilter,securityContextHolderAwareRequestFilter,rememberMeAuthenticationFilter,anonymousAuthenticationFilter,exceptionTranslationFilter',
        '/**': 'JOINED_FILTERS'
    ]
    

    【讨论】:

      猜你喜欢
      • 2019-01-29
      • 2011-08-23
      • 2014-07-28
      • 2013-03-12
      • 2021-01-28
      • 2013-07-22
      • 1970-01-01
      • 2020-11-04
      • 2014-10-24
      相关资源
      最近更新 更多