扩展AjaxAwareAuthenticationSuccessHandler,记住目标URL

时间:2011-10-21 19:13:25

标签: grails spring-security

Grails 1.3.7 Spring-Security-Core 1.1.2

我已经实现了一个扩展AjaxAwareAuthenticationSuccessHandler的自定义类,以便在登录后可以将特定的角色带到特定的URL,这很有用。但是,如果会话过期,我需要能够在会话过期时将用户带到请求的URL,从而覆盖基于角色的URL。

以下是我的代码的简化版

class MyAuthSuccessHandler extends AjaxAwareAuthenticationSuccessHandler {

  @Override
  public void onAuthenticationSuccess(final HttpServletRequest request, final HttpServletResponse response,
                                      final Authentication authentication) throws ServletException, IOException {

    def goAdmin = false
    authentication.authorities.each { ga ->
      if (ga.authority.equals('ROLE_ADMIN')) {
        goAdmin = true
      }
    }

    if (goAdmin) {
      response.sendRedirect(request.contextPath + '/admin/index')
    }else{
      super.onAuthenticationSuccess(request, response, authentication)
    }
  }
}

我尝试添加一个对DetermTargetUrl(请求,响应)的调用,但它总是返回'/',即使我已经请求了像/ admin / foo这样受保护的资源。

感谢。

1 个答案:

答案 0 :(得分:0)

请求

super.determineTargetUrl(request, response);
如果你使用SavedRequestAwareAuthenticationSuccessHandler作为超类,那么

应该有用。我不确定您是否可以在您的方案中切换到此类。也许这会有所帮助,但我想你完全了解它:http://omarello.com/2011/09/grails-custom-target-urls-after-login/