18

我正在使用弹簧安全性来限制网址。我正在尝试在同一页面上提供注册和登录页面。

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

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

有任何想法吗?

4

4 回答 4

16

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

SavedRequest savedRequest = (SavedRequest)session.getAttribute(
    AbstractProcessingFilter.SPRING_SECURITY_SAVED_REQUEST_KEY);
字符串 requestUrl = savedRequest.getFullRequestUrl();
于 2009-03-10T17:21:17.203 回答
15

他们在 spring security 3.0 中移动了一些东西,所以上面的代码片段不再起作用了。不过,这可以解决问题:

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() + "/";
}
于 2010-11-29T20:31:31.447 回答
5

使用弹簧安全 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");
    }
}
于 2017-05-24T23:48:47.783 回答
2
DefaultSavedRequest savedRequest = (DefaultSavedRequest)session.getAttribute("SPRING_SECURITY_SAVED_REQUEST");

String requestURL = savedRequest.getRequestURL();   // URL <br>
String requestURI = savedRequest.getRequestURI();   // URI
于 2020-06-03T06:42:31.900 回答