grails spring security determineTargetUrl not called

时间:2015-09-11 10:30:00

标签: spring grails groovy spring-security url-redirection

当我需要时,我实现了自己的AuthSuccessHandler重定向到控制器/操作:

class AuthSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {

    @Override
    protected String determineTargetUrl(HttpServletRequest request, HttpServletResponse response) {

        def referer = request.getHeader("Referer")

        println "referer = "+referer

        if(referer?.contains("/some/url/")){
            def id = referer.substring(referer.lastIndexOf("/")+1)      
            println "in ref redirect to "+"/some/other/"+id 
            return "/some/other/"+id
        }
        else{
            println "not in ref redirect to "+super.determineTargetUrl(request, response)
            return super.determineTargetUrl(request, response);
        }
    }
}

这是我的resources.groovy:

authenticationSuccessHandler(AuthSuccessHandler) {
    def conf = SpringSecurityUtils.securityConfig
    requestCache = ref('requestCache')
    defaultTargetUrl = conf.successHandler.defaultTargetUrl
    alwaysUseDefaultTargetUrl = conf.successHandler.alwaysUseDefault
    targetUrlParameter = conf.successHandler.targetUrlParameter
    useReferer = conf.successHandler.useReferer
    redirectStrategy = ref('redirectStrategy')
}

当我通过url / login / auth登录时,一切都像魅力一样。调用determineTargetUrl函数。

但是当我进入受保护的URL之前需要登录才能登录之后。框架只是重定向到受保护的URL。我假设这与保存我最初想要去的URL的框架有关,并且在不调用determineTargetUrl函数的情况下重定向到该URL,因为它已经知道要去哪里。

我喜欢这个功能,但无论如何我想控制重定向的位置,因为在特殊情况下(当referer包含“/ some / url”时)我想重定向到另一个URL。

0 个答案:

没有答案