230718 김영한 강의 들은 내용 정리.(MVC 2편)

bluesky·2023년 7월 18일

TodayILearned

목록 보기
3/16

로그인 처리1 - 쿠키, 세션

쿠키만 써서 로그인 처리하기

  • 세션쿠키를 사용할수 있음.(만료 날짜 생략으로 브라우저 종료시까지만 유지)
//쿠키에 시간 정보를 주지 않으면 세션 쿠키(브라우저 종료시 모두 종료)
      Cookie idCookie = new Cookie("memberId",
  String.valueOf(loginMember.getId()));
      response.addCookie(idCookie);
  • @CookieValue를 이용하면 쉽게 쿠키를 얻을 수 있음.
  • 로그아웃은 동일한 쿠키명으로 maxAge를 0으로 처리해서 response에 담기
  • 하지만 보안에 취약함.

쿠키와 세션으로 로그인 처리하기.

  • 세션에 멤버 아이디를 담음.

  • 그리고 쿠키는 JSESSIONID로, 유추하기 어려운 값을 담아서 씀. 물론 세션 쿠키.

  • HttpSession

    • 서블릿이 제공하는 클래스.
    • 세션을 좀더 편리하게 쓸수 있음.(서블릿을 통해 HttpSession 을 생성하면 다음과 같은 쿠키를 생성한다. 쿠키 이름이 JSESSIONID 이고, 값은 추정 불가능한 랜덤 값이다.)
    • 세션의 타임아웃 정하기(server.servlet.session.timeout=60 이렇게 쓸 수 있음.)
  • 테스트 하는 메서드가 HttpServletResponse나 Request를 사용하는 경우에는?

    • MockHttpServletResponse, Request를 쓸수 있다.
    MockHttpServletResponse response = new MockHttpServletResponse(); Member member = new Member(); sessionManager.createSession(member, response);
    //요청에 응답 쿠키 저장
    MockHttpServletRequest request = new MockHttpServletRequest(); request.setCookies(response.getCookies());

로그인 처리2 - 필터, 인터셉터

필터로 처리.

  • 필터 체인
    • HTTP 요청 ->WAS-> 필터1-> 필터2-> 필터3-> 서블릿 -> 컨트롤러
  • 필터로 로그인 처리하려면
    • Filter를 구현하는 LoginFilter.java를 만들고
    • FilterRegistrationBean으로 등록해서 쓴다.

인터셉터로 처리

  • HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러 //로그인 사용자
    HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터(적절하지 않은 요청이라 판단, 컨트롤러 호출 X) // 비 로그인 사용자

  • 일단 쓰려면

    • 헨들러 인터셉터를 구현한 LoginInterceptor 이용.
    • 그리고 webconfigurer를 구현한 클래스에서 이렇게 적용.
    @Configuration
    public class WebConfig implements WebMvcConfigurer {
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new LogInterceptor())
                    .order(1)
                    .addPathPatterns("/**")
                    .excludePathPatterns("/css/**", "/*.ico", "/error");
        }
    //...
    }
  • ArgumentResolver를 직접 구현해서, @Login과 같은 어노테이션을 커스텀하게 만들수 있음.(로그인 유저면 해당 멤버 인스턴스 반환, 없으면 널 처리)

profile
SMART https://github.com/dongseoki?tab=repositories

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

좋은 글 잘 읽었습니다, 감사합니다.

답글 달기