[BOOK 개인프로젝트] 12. 마이 페이지

이재민·2024년 6월 3일
0

JPA 

목록 보기
14/21
post-thumbnail

마이 페이지에 로그인 한 회원의 정보를 표시해보자!

회원 정보 표시

    @GetMapping("home/mypage")
    public String mypage(@SessionAttribute(SessionConst.LOGIN_MEMBER) Member member, Model model) {

        //세션에 LoginMember를 상수로 설정 -> SessionAttribute로 바로 가져올 수 있음
        model.addAttribute("member", member);

        log.info("My Page");

        return "home/mypage/mypage";
    }

로그인 시 세션에 저장한 값을 통해 회원 정보를 가져온다.

업로드중..

특히 여기서 비밀번호가 해쉬화하여 저장된 것을 볼 수 있다.

로그 아웃

LoginController

    @GetMapping("/logout")
    public String logout(HttpServletRequest request) {
        //세션을 삭제한다.
        HttpSession session = request.getSession(false);
        if (session != null) {
            session.invalidate();
        }
        return "login";
    }

세션 삭제 후 로그인 화면으로 돌아가게 한다.

돌아가기 화면

 <a href="/login" class="btn btn-bd-primary">돌아가기</a>
</div>

홈 화면으로 돌아가게 한다.

*참고 - 로그인 시 세션 처리 로직

SessionManager

@Component
public class SessionManager {
    public static final String SESSION_COOKIE_NAME = "mySessionId";
    private Map<String, Object> sessionStore = new ConcurrentHashMap<>();

    /**
     세션 생성
     */
    public void createSession(Object value, HttpServletResponse response) {
        //세션 id를 생성하고, 값을 세션에 저장
        String sessionId = UUID.randomUUID().toString();
        sessionStore.put(sessionId, value);

        //쿠키 생성
        Cookie mySessionCookie = new Cookie(SESSION_COOKIE_NAME, sessionId);
        response.addCookie(mySessionCookie);
    }

    /**
     세션 조회
     */
    public Object getSession(HttpServletRequest request) {
        Cookie sessionCookie = findCookie(request, SESSION_COOKIE_NAME);
        if (sessionCookie == null) {
            return null;
        }
        return sessionStore.get(sessionCookie.getValue());
 }

    /**
     세션 만료
     */
    public void expire(HttpServletRequest request, HttpServletResponse response) {
        Cookie sessionCookie = findCookie(request, SESSION_COOKIE_NAME);
        if (sessionCookie != null) {
            //서버 측에서 쿠키 삭제
            sessionStore.remove(sessionCookie.getValue());
            
            //클라이언트 측에서도 쿠키 삭제
            sessionCookie.setMaxAge(0);
            sessionCookie.setPath("/login");
            response.addCookie(sessionCookie);
        }
    }

    /**
     * @param request
     * @param cookieName
     * @return 쿠키 있으면 Cookie, 없으면 Null
     */
    private Cookie findCookie(HttpServletRequest request, String cookieName) {
        if (request.getCookies() == null) {
            return null;
        }
        return Arrays.stream(request.getCookies())
                .filter(cookie -> cookie.getName().equals(cookieName))
                .findAny()
                .orElse(null);
    }

SessionConst

public class SessionConst {

    //로그인한 사용자 정보를 세션에 저장할 때 사용되는 키 값을 상수로 정의
    public static final String LOGIN_MEMBER = "loginMember";

}
profile
복학생의 개발 일기

0개의 댓글

관련 채용 정보