我有一个Grails应用程序,它使用Spring Security Core进行身份验证和授权。该应用程序的主要目的是提供一个rest api,该api使用通过每个请求中的Authorization标头传入的令牌进行保护。此令牌是在grails应用程序之外生成的,并且没有正式的“登录”阶段 - 每个请求都经过身份验证和单独授权。
我已经实现了我自己的身份验证过滤器和提供程序,这似乎与令牌身份验证相同。问题是,对于成功的身份验证,当我只想静默地继续原始请求时,spring安全核心总是重定向到登录成功页面(通过successHandler.defaultTargetUrl配置):
查看AjaxAwareAuthenticationSuccessHandler的源代码,这似乎是罪魁祸首,我看到我可以通过添加targetUrlParameter(默认为'spring-security-redirect)作为请求参数来设置targetUrl,但这似乎既丑陋又不必要。有没有办法让这项工作符合要求?我考虑过实现自己的SuccessHandler ......这是正确的解决方案吗?我还有其他选择吗?
编辑: 我通过扩展AjaxAwareAuthenticationSuccessHandler并覆盖determineTargetUrl(请求,响应)并返回request.getServletPath()来尝试自定义成功处理程序。这让我超越了最初的问题,但创建了一个无限的重定向循环,可能是由于我需要无状态身份验证和DefaultRedirectStrategy重定向到目的地而不是转发。
编辑#2:成功!使用this SOF thread中的代码我能够使用自定义AuthenticationSuccessHandler解决方案。对于Grails用户,您还需要更新resources.groovy,如下所示:
authenticationSuccessHandler(com.foo.bar.YourSuccessHandler){}
答案 0 :(得分:2)
您是否检查了基于Spring Security Core的Spring Security for Rest。
修改强>
如果您想更改默认操作,可以在config.groovy中更改targetUrlParameter的值。