【问题标题】:Spring Security: How to get the initial target urlSpring Security:如何获取初始目标 url
【发布时间】:2020-06-03 14:53:42
【问题描述】:

我正在使用 spring security 来限制 url。我正在尝试在同一页面上提供注册和登录页面。

登录时 spring 安全转移到受限页面。但是我正在尝试将目标 url 传递给注册过程,以便在注册后我们可以重定向到受限页面。

如何获取用户被重定向的实际 URL。

有什么想法吗?

【问题讨论】:

  • 我配置了 spring 3.1.1.RELEASE 并尝试使用你们发布的解决方案,但不知何故我得到了null 的会话。关于这种行为的可能原因有什么想法吗??
  • 试试SavedRequest savedRequest = (SavedRequest) session.getAttribute("SPRING_SECURITY_SAVED_REQUEST");
  • 试试这个:SavedRequest savedRequest = new HttpSessionRequestCache().getRequest(request, response);

标签: spring spring-security


【解决方案1】:

这就是我从 Spring Security 获取 URL 的方式。

SavedRequest savedRequest = (SavedRequest)session.getAttribute( AbstractProcessingFilter.SPRING_SECURITY_SAVED_REQUEST_KEY); 字符串 requestUrl = savedRequest.getFullRequestUrl();

【讨论】:

    【解决方案2】:

    他们在 spring security 3.0 中做了一些改动,所以上面的代码 sn-p 不再起作用了。不过,这可以解决问题:

    protected String getRedirectUrl(HttpServletRequest request) {
        HttpSession session = request.getSession(false);
        if(session != null) {
            SavedRequest savedRequest = (SavedRequest) session.getAttribute(WebAttributes.SAVED_REQUEST);
            if(savedRequest != null) {
                return savedRequest.getRedirectUrl();
            }
        }
    
        /* return a sane default in case data isn't there */
        return request.getContextPath() + "/";
    }
    

    【讨论】:

    • 请注意,WebAttributes 直到 3.0.3 才可用
    • WebAttributes.SAVED_REQUEST 在 3.1 中不再存在,但 this solution 有效。
    • @TilmanHausherr WebAttributes.SAVED_REQUEST 可以在 Spring 3.1 中替换为字符串“SPRING_SECURITY_SAVED_REQUEST”,这使得上述解决方案再次起作用。
    • 知道是什么(在哪里?)设置了这个"SPRING_SECURITY_SAVED_REQUEST"会话属性吗?
    • 顺便说一句,常量是 org.springframework.security.web.savedrequest.HttpSessionRequestCache.SAVED_REQUEST
    【解决方案3】:

    使用 Spring Security 4.1.4:

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request,
            HttpServletResponse response, Authentication authentication)
            throws IOException, ServletException {
    
        SavedRequest savedRequest = new HttpSessionRequestCache().getRequest(request, response);
        if (savedRequest != null) {
            response.sendRedirect(savedRequest.getRedirectUrl());
        }
        else{
            response.sendRedirect("some/path");
        }
    }
    

    【讨论】:

      【解决方案4】:
      DefaultSavedRequest savedRequest = (DefaultSavedRequest)session.getAttribute("SPRING_SECURITY_SAVED_REQUEST");
      
      String requestURL = savedRequest.getRequestURL();   // URL <br>
      String requestURI = savedRequest.getRequestURI();   // URI
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-09
        • 2011-04-22
        • 1970-01-01
        • 2020-11-21
        • 2018-05-13
        • 2011-06-08
        • 1970-01-01
        相关资源
        最近更新 更多