当我需要时,我实现了自己的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。