본문 바로가기
Java/Spring

Spring) Security - 로그인 후처리

by 박채니 2022. 9. 11.
안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.

 

로그인 후처리

 

security-context.xml

<form-login
    login-page="/member/memberLogin.do"
    login-processing-url="/member/memberLogin.do"
    default-target-url="/"
    always-use-default-target="false"
    username-parameter="memberId"
    password-parameter="password"
    authentication-success-forward-url="/member/memberLoginSuccess.do"  />

로그인 후처리를 위해 authentication-success-forward-url을 이용하였습니다.

로그인 성공 시 해당 핸들러를 거치도록 처리!

(authentication-success-handler-ref 로도 처리 가능)

 

Controller

MemberSecurityController

@PostMapping("/memberLoginSuccess.do")
public String memberLoginSuccess(HttpSession session) {
    log.debug("memberLoginSuccess 호출!");

    // 로그인 후처리
    String location = "/";		

    // security가 관리하는 다음 리다이렉트 url
    SavedRequest savedRequest = (SavedRequest) session.getAttribute("SPRING_SECURITY_SAVED_REQUEST");
    if(savedRequest != null) {
        location = savedRequest.getRedirectUrl();
    }
    log.debug("location = {}", location);
    return "redirect:" + location;
}

다음 이동할 페이지를 security가 관리해주므로 security에게 RedirectUrl를 가져와 처리해줍니다.

"SPRING_SECURITY_SAVED_REQUEST"를 세션에서 가져와주며, 다음 이동할 url이 있었다면 해당 url을 가져와 location에 대입해주었습니다.

(없었다면 SavedRequest가 null이므로 "/"로 리다이렉트 처리!)

 

게시판 페이지 접속 - 로그인 처리 후 콘솔출력값

DEBUG: com.ce.spring2.common.interceptor.LogInterceptor - ==============================================
DEBUG: com.ce.spring2.common.interceptor.LogInterceptor - POST /spring2/member/memberLoginSuccess.do
DEBUG: com.ce.spring2.common.interceptor.LogInterceptor - ----------------------------------------------
DEBUG: com.ce.spring2.member.controller.MemberSecurityController - memberLoginSuccess 호출!
DEBUG: com.ce.spring2.member.controller.MemberSecurityController - location = http://localhost:9090/spring2/board/boardList.do
DEBUG: com.ce.spring2.common.interceptor.LogInterceptor - +++++++++++++++++++++++++++++++++++++++++++++++
DEBUG: com.ce.spring2.common.interceptor.LogInterceptor - mav = ModelAndView [view="redirect:http://localhost:9090/spring2/board/boardList.do"; model={}]
DEBUG: com.ce.spring2.common.interceptor.LogInterceptor - ***********************************************

memberLoginSuccess 핸들러를 거쳐간 것을 확인할 수 있으며, 바로 board/boardList로 리다이렉트 처리 된 것을 확인할 수 있습니다.