티스토리 뷰

728x90

타임리프에서 아래와 같이 input을 받고 action으로 값을 올려준다.

<form method="get" th:action="@{/auth/login}">
    <div sec:authorize="!isAuthenticated()">
        <input type="hidden" th:name="requestURI" th:value="${#httpServletRequest.requestURI}">
        <button class="btn btn-outline-dark">
            <i class="fas fa-shopping-cart"></i>
            장바구니
        </button>
        <button class="btn btn-outline-dark">
            <i class="fas fa-cash-register"></i>
            바로구매
        </button>
    </div>
</form>

 

해당 이름을 파라미터로 받는다. GET 요청이므로 body는 사용하지 않는 것이 좋다.

@GetMapping("/login")
public String login(@RequestParam(name = "requestURI", required = false) String requestURI, HttpServletRequest request, @CurrentUser User user) {
    request.getSession().setAttribute("requestURI", requestURI);
    if (user != null) {
        return "redirect:/";
    }

    return "auth/login";
}

 

loginSuccessHandler에서 하나의 더 분기점을 만들어 세션에 해당하는 URI가 있다면

redirectStrategy를 URI로 가게하고 세션에 남은 URI를 제거.

protected void resultRedirectStrategy(final HttpServletRequest request,
                                      final HttpServletResponse response,
                                      final Authentication authentication) throws IOException, ServletException {

    SavedRequest savedRequest = (SavedRequest) request.getSession().getAttribute("SPRING_SECURITY_SAVED_REQUEST");

    if (authentication.getAuthorities().contains(new SimpleGrantedAuthority("ROLE_ADMIN"))) {
        redirectStrategy.sendRedirect(request, response, "/admin");
        ----------------------------------------------------------------
    } else if (request.getSession().getAttribute("requestURI") != null) {
        String requestURI = (String) request.getSession().getAttribute("requestURI");
        redirectStrategy.sendRedirect(request, response, requestURI);
        request.getSession().removeAttribute("requestURI");
    }----------------------------------------------------------------
    else if (savedRequest != null) {
        String targetUrl = savedRequest.getRedirectUrl();
        redirectStrategy.sendRedirect(request, response, targetUrl);
    } else {
        redirectStrategy.sendRedirect(request, response, defaultUrl);
    }
}

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함