Spring
스프링 MVC 2 - 정리(로그인 처리 2 - 필터, 인터셉터)
스프링 MVC 2 - 정리(로그인 처리 2 - 필터, 인터셉터)
2022.09.23정리(로그인 처리 2 - 필터, 인터셉터) 서블릿 필터 - 소개 공통 관심사항 처리를 하는 것이다. AOP로도 해결할 수 있지만, 웹과 관련된 공통 관심사를 처리할 때는 HTTP의 헤더나 URL의 정보들이 필요한데, 서블릿 필터나 스프링 인터셉터는 HttpServletRequest를 제공한다. 필터는 서블릿이 지원하는 수문장이다. 서블릿 필터 흐름 = HTTP 요청 → WAS → 필터 → 서블릿(디스패쳐서블릿) → 컨트롤러 서블릿 필터 제한 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러 //로그인 사용자 HTTP 요청 -> WAS -> 필터(적절하지 않은 요청이라 판단, 서블릿 호출X) //비 로그인 사용자 서블릿 필터 체인 = HTTP 요청 → WAS → 필터1 → 필터2 → 필터3 ..
스프링 MVC 2 - ArgumentResolver 활용
스프링 MVC 2 - ArgumentResolver 활용
2022.09.23ArgumentResolver 활용 MVC1편 6.스프링 MVC - 기본기능 → 요청 매핑 핸들러 어댑터 구조에서 ArgumentResolver를 학습했다. 이번시간에는 해당 기능을 사용해서 로그인 회원을 조금 편리하게 찾아보자. HomeController - 추가 homeLoginV3Spring()의 @GepMapping 주석 처리 다음에ㅐ 설명하는 @Login 애노테이션을 만들어야 컴파일 오류가 사라진다. @Login 애노테이션이 있으면 직접 만든 ArgumentResolver가 동작해서 자동으로 세션에 있는 로그인 회원을 찾아주고, 만약 세션에 없다면 null을 반환하도록 개발해보자. @Login 애노테이션 생성 @Target(ElementType.PARAMETER) : 파라미터에만 사용 @Rete..
스프링 MVC 2 - 스프링 인터셉터 - 인증 체크
스프링 MVC 2 - 스프링 인터셉터 - 인증 체크
2022.09.23스프링 인터셉터 - 인증 체크 서블릿필터에서 사용했던 인증 체크 기능을 스프링 인터셉터로 개발해보자. LoginCheckInterceptor 서블릿 필터와 비교해서 코드가 매우 간결하다. 인증이라는 것은 컨트롤러 호출 전에만 호출하면 된다. 따라서 preHandle만 구현하면 된다. 순서 주의, 세밀한 설정 가능) 인터셉터와 필터가 중복되지 않도록 필터를 등록하기 위한 logFilter(), loginCheckFilter()의 @Bean은 주석처리하자. 인터셉터를 적용하거나 하지 않을 부분은 addPathPatterns와 excludePathPatterns에 작성하면 된다. 기본적으로 모든 경로에 해당 인터셉터를 적용하되(/**), 홈(/), 회원가입(/members/add), 로그인(/login), 리..
스프링 MVC 2 - 스프링 인터셉터 - 요청 로그
스프링 MVC 2 - 스프링 인터셉터 - 요청 로그
2022.09.23스프링 인터셉터 - 요청 로그 LogInterceptor - 요청 로그 인터셉터 String uuid = UUID.randomUUID().toString() 요청 로그를 구분하기 위한 uuid를 생성한다. request.setAttribute(LOG_ID, uuid) 서블릿 필터의 경우 지역변수로 해결이 가능하지만, 스프링 인터셉터는 호출 시점이 완전히 분리되어 있다. 따라서 preHandle에서 지정한 값을 postHandle, afterCompletion에서 함께 사용하려면 어딘가에 담아두어야 한다. LogInterceptor도 싱글톤 처럼 사용되기 때문에 멤버 변수를 사용하면 위험하다. 따라서 request에 담아두었다. 이 값은 afterCompletion에서 request.getAttribute..
스프링 MVC 2 - 스프링 인터셉터 - 소개
스프링 MVC 2 - 스프링 인터셉터 - 소개
2022.09.23스프링 인터셉터 - 소개 스프링 인터셉터도 서블릿 필터와 같이 웹과 관련된 공통 관심 사항을 효과적으로 해결할 수 있는 기술이다. 서블릿 필터가 서블릿이 제공하는 기술이라면, 스프링 인터셉터는 스프링 MVC가 제공하는 기술이다. 둘다 웹과 관련된 공통 관심 사항을 처리하지만, 적용되는 순서와 범위, 그리고 사용방법이 다르다. 스프링 인터셉터 흐름 스프링 인터셉터는 디스패처 서블릿과 컨트롤러 사이에서 컨트롤러 호출 직전에 호출 된다. 스프링 인터셉터는 스프링 MVC가 제공하는 기능이기 때문에 결국 디스패처 서블릿 이후에 등장하게 된다. 스프링 MVC의 시작점이 디스패처 서블릿이라고 생각해보면 이해가 될 것이다. 스프링 인터셉터에도 URL 패턴을 적용할 수 있는데, 서블릿 URL 패턴과는 다르고, 매우 정밀..
스프링 MVC 2 - 서블릿 필터 - 인증 체크
스프링 MVC 2 - 서블릿 필터 - 인증 체크
2022.09.22서블릿 필터 - 인증 체크 드디어 인증 체크 필터를 개발해보자. 로그인 되지 않은 사용자는 상품 관리 뿐만 아니라 미래에 개발될 페이지에도 접근하지 못하도록 하자. LoginCheckFilter - 인증 체크 필터 whitelist = {"/", "/members/add", "/login", "/logout", "/css/*"}; 인증 필터를 적용해도 홈, 회원가입, 로그인 화면, css 같은 리소스에는 접급할 수 있어야 한다. 이렇게 화이트 리스트 경로는 인증과 무관하게 항상 허용한다. 화이트 리스트를 제외한 나머지 모든 경로에는 인증 체크 로직을 적용한다. isLoginCheckPath(requestURI) 화이트 리스트를 제외한 모든 경우에 인증 체크 로직을 적용한다. httpResponse.sen..