반응형
로그인 하고나서 이전 페이지로 이동하는 방법에 대해 알아보겠습니다.
여기서는 총 파일 3개를 수정 or 생성합니다.
LoginSuccessHandler.java // 로그인 완료 후 처리되는 핸들러 (AuthenticationSuccessHandler 인터페이스 구현)
SecurityConfig.java // 스프링 시큐리티 설정파일
LoginController.java // '/login' URL 을 매핑하는 클래스
해당 기능을 구현할 경우 다음의 장단점이 있습니다.
- 장점. 로그인을 하고나서 전 페이지로 이동이 수월함
- 단점. 로그인이 필요한 서비스로 이동하다가 걸린경우,
로그인 이후에 해당페이지로 이동하는게 아니라 호출한 페이지로 이동
예) /main 에서 /admin 으로 접근하다가 로그인이 걸린건데,
설정하지 않으면 로그인 성공 후 /admin 으로 바로 접속되지만
설정할 경우 로그인 성공 후 호출했던 /main 으로 이동.
그럼 구현방법에 대해 알아보겠습니다.
1. LoginSuccessHandler 구현
import lombok.extern.java.Log; import org.springframework.security.core.Authentication; import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; @Log public class LoginSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler { public LoginSuccessHandler(String defaultTargetUrl) { setDefaultTargetUrl(defaultTargetUrl); } /** * 인증에 성공할 경우 아래 매서드로 이동. */ @Override public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws ServletException, IOException { HttpSession session = request.getSession(); if (session != null) { String redirectUrl = (String) session.getAttribute("prevPage"); if (redirectUrl != null) { session.removeAttribute("prevPage"); getRedirectStrategy().sendRedirect(request, response, redirectUrl); } else { super.onAuthenticationSuccess(request, response, authentication); } } else { super.onAuthenticationSuccess(request, response, authentication); } } }
2. Security Config 설정.
@Override protected void configure(HttpSecurity http) throws Exception { http .formLogin() .loginPage("/login") .successHandler(new LoginSuccessHandler("/")) // 이 부분이 중요. .permitAll() ... ; }
3. LoginController 수정
@RequestMapping(path = {"/login"}) public String login(Model model){ // 이전페이지 URL 추출 String referrer = request.getHeader("Referer"); request.getSession().setAttribute("prevPage", referrer); return "login"; }
반응형
'공부 > 프로그래밍' 카테고리의 다른 글
[SpringBoot 2.x] 회원가입 할 때 이미 가입한 회원이면 로그인 + Auth 하기. (0) | 2018.07.09 |
---|---|
[SpringBoot 2.x] (Spring Security) 페이스북 로그인 연동 (0) | 2018.07.07 |
[SpringBoot] (Spring Security) 로그인 시 추가정보 User 에 담기 (0) | 2018.07.05 |
[SpringBoot] JPA 설정 및 테스트 (0) | 2018.07.04 |
[SpringBoot] Controller 테스트 작성하기.(Mybatis 테스트 포함) (0) | 2018.07.03 |
댓글