티스토리 뷰
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);
}
}
'Spring' 카테고리의 다른 글
Page<Entity>를 Page<EntityDTO> 형태로 반환하는 방법과 Optional을 끼얹는 방법 (0) | 2022.05.30 |
---|---|
하나의 form에서 여러개 field의 file을 받는 방법 (0) | 2022.05.29 |
로그인 이후에 이전 페이지 스크롤 위치로 이동하는 방법 구현하기 (0) | 2022.05.26 |
preHandle과 afterCompletion으로 비밀번호 값 비교적 안전하게 넘기는 방법 (0) | 2022.05.23 |
Entity를 다룰때 Primitive Type가 아닌 Wrapper Class를 쓰는 이유 (0) | 2022.04.21 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 배포
- ModelAttribute
- 레디스
- 루나빔
- 아키텍처
- RequestParam
- neovim
- lunarvim
- Dap
- RequestBody
- IDE
- RequestPart
- 도커
- JavaScript
- vim
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함