2014-01-21 39 views
2

我有一个使用Spring Security Core进行认证和授权的Grails应用程序。该应用程序的主要目的是提供一个rest API,通过每个请求中通过授权标头传入的令牌来保护它。该令牌在grails应用程序之外生成,并且没有正式的“登录”阶段 - 每个请求都被单独验证和授权。使用Spring Security避免在Grails应用程序中登录重定向

我已经实现了我自己的身份验证过滤器和提供程序,似乎只要令牌身份验证发挥作用。问题是,对于成功的认证Spring Security的核心始终重定向到一个登录成功页面(通过successHandler.defaultTargetUrl配置)时,我只想静静地,像这样的原始请求继续:

  1. 用户请求/ REST/foo
  2. 自定义弹簧安全过滤器匹配请求并处理它。如果授权头很好,那么会调用/ rest/foo(当前重定向到defaultTargetUrl),否则用户将被转发到/ error。 (这最后一部分作品)

望着AjaxAwareAuthenticationSuccessHandler源,这似乎是罪魁祸首,我看到,我可以通过添加targetUrlParameter(默认为“春季安全重定向)作为请求的参数组的targetUrl这个但这似乎既丑陋又不必要。有什么方法可以根据需要进行这项工作吗?我考虑过实施我自己的SuccessHandler ...是否正确的解决方案?我有其他选择吗?

编辑: 我给自定义成功处理程序尝试通过扩展AjaxAwareAuthenticationSuccessHandler并重写判断目标UI(请求,响应)并返回request.getServletPath()。这让我经历了最初的问题,但创建了一个无限的重定向循环,可能是由于我需要无状态身份验证和DefaultRedirectStrategy重定向到目标而不是转发的组合。编号2:成功!使用this SOF thread中的代码,我能够使自定义AuthenticationSuccessHandler解决方案正常工作。 Grails的用户,你还需要这样的更新resources.groovy:

authenticationSuccessHandler(com.foo.bar.YourSuccessHandler){} 

回答

2

你有没有检查它是基于Spring Security的核心Spring Security for Rest

编辑

改变在Config.groovy中的targetUrlParameter值去,如果你想改变默认操作方式。

+0

我没有,但会看看 – Nick

+0

我看了一下,它是有前途的,但鉴于第一个版本似乎已经〜18天前,这是一个安全插件,我仍然想使用更多如果可能的话,成熟的Spring Security Core。 – Nick

+0

re targetUrlParameter:我认为这只是让你指定可用于传递targetUrl的参数的名称。尽管如此,当请求指向/ rest/foo时,要求将targetUrl参数设置为/ rest/foo会感到难看,或者至少我从来没有见过其他REST API能够让其执行此操作。 – Nick

相关问题