【发布时间】: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