Spring Security 3获取最初请求的URL

c12*_*c12 15 spring spring-security

我需要根据用户来自哪里修改我的spring security登录页面.我的客户希望两者之间的风格不同.如果你来自appcontextroot/testVS appcontextroot/choose.我尝试执行以下操作,但它String url=savedRequest.getRedirectUrl();已经等于spring登录页面,而不是用户请求的初始页面.有任何想法吗?

ExternalContext externalContext = FacesUtils.getExternalContext();
    HttpServletRequest request = (HttpServletRequest)externalContext.getRequest();
    HttpSession session = request.getSession(false);
    if(session != null) {
        SavedRequest savedRequest = new DefaultSavedRequest(request, new PortResolverImpl());
        String url=savedRequest.getRedirectUrl();
    } 
Run Code Online (Sandbox Code Playgroud)

axt*_*avt 47

您需要SavedRequest从会话中提取,而不是创建一个新会话:

SavedRequest savedRequest = 
    new HttpSessionRequestCache().getRequest(request, response);
Run Code Online (Sandbox Code Playgroud)


wee*_*ens 5

SavedRequest savedRequest =
    (SavedRequest)session.getAttribute("SPRING_SECURITY_SAVED_REQUEST");
// ...check for null...
String targetUrl = savedRequest.getRedirectUrl();
Run Code Online (Sandbox Code Playgroud)

如果您没有可用的HttpServletResponse(例如,如果您使用org.springframework.social.connect.web.SignInAdapter),那么丑陋但有效.

使用Spring Security 3.1.0.RC2进行测试.