톰캣 실행 -> 스프링 실행

 

필터

1차 필터 - 톰캣이 가지고 있는 web.xml

2차 필터 - 스프링의 인터셉터

 

필터 또는 인터셉터를 설정 한다는 것은

기본으로 사용하는 필터를 disable하거나

기본으로 사용하지 않는 필터를 enable하거나

내가 직접 필터를 커스텀 하는 것

 

톰캣의 필터와 스프링의 인터셉터가 합쳐 쓰는 것을 시큐리티 라고 한다.

추후 webMvcConfigurer 가 다른것으로 바뀐다면 인터셉터에 접근하는 방법을 찾아야한다
(WebFlux 등)

인터셉터 + 필터 = 시큐리티

 

AOP =관점 지향 프로그래밍 - 함수의 직전과 직후를 처리할 수 있다

회원가입
직전 - 유효성체크
본문 - 회원가입
직후 - 세션등록 및 로그인처리

직전과 직후의 부가적인 기능을 밖으로 빼고 본문의 기능(관심 로직)을 작성

부가적인 기능은 [공통적]으로 쓸 수 있게 작성해놓고 사용 !! -> 핵심

-------

레거시 사용시

web.xml ------- 톰캣 시작시 발동

root-context.xml  -------- 메모리에 딱 1번만 올릴 것들 (DB관련 등) // 톰캣 시작시 발동
객체의 생성 및 관리


servlet-context.xml -------- 요청 올 때마다 메모리에 띄울 것들 // Request할 때 발동된다

----------

aop는 요청시마다 생겨야하니까 servlet-context.xml

----------

 

인터셉터 요약

1. @Configuration으로 설정파일 지정
2. 설정파일에 WebMvcConfigurer을 implements
3. 인터셉터만 구성하기위해 addInterceptors() 오버라이딩
4. registry에 인터셉터 추가 / 주소패턴 추가
5-1. 인터셉터 return true( 컨트롤러 함수진입 )
5-2. 인터셉터 return false( throw new Exception() )
6. @ControllerAdvice를 어노테이션한 익셉션 핸들러 진입
7. @ExceptionHandler(value = 익셉션이름.class)인 함수 실행

 

인터셉터용 자바파일 생성

 

 

 

 

인터셉터를 사용하기위해서 WebMvcConfigurer를 임플리먼트 한다

 

 

설정파일에는 @Configuration 을 추가

addInterceptors 인터셉터를 추가하면 WebConfig 클래스는 인터셉터의 역할을 하게 된다.

WebMvcConfigurer.super.addInterceptors(registry); 를 삭제한다.

 

 

(Dispatcher Servlet에서 스프링으로 보낼때 사이에서 핸들러가 중간에 낄 수 있다.)

핸들러 - 주소매핑( 핸들러 매핑 -> 디스패쳐서블릿 -> 핸들러 어댑터 -> 인터셉터(?) -> 컨트롤러 )

 

 

프리핸들러로 컨트롤러의 함수에 진입하기 직전을 컨트롤 할 수 있다.

아래는 HandlerInterceptor 인터페이스를 new 해서 preHandle을 오버라이딩 한 상태

 

 

HandlerInterceptor 인터셉터를 커스텀해주자

 

HandlerInterceptorAdapter를 상속받아서 인터셉터 클래스를 만든다

 

 

 

WebConfig.java에 위에서 커스텀 해준 인터셉터들을 넣고

PathPatterns를 각각 설정해준다

 

 

실행해서 /user 하위경로를 request하면 자동으로 인터셉트한다.(세션을 체크해야함 메시지 확인)

 

 

커스텀한 인터셉터에서 세션 등을 확인하여 

문제가 있을시 컨트롤러 함수로 진입하지 않고 메세지를 띄운 뒤 다른 페이지로 리다이렉션 시킨다

문제가 없을시 컨트롤러 함수로 이동

 

 

로그인 하지 않고 진입시 화면

 

 

로그인 후 진입시 접속된다

 

 

위와 마찬가지로 RoleIntercepter도 세팅

( 스샷의 오류 : principal.getRole() 앞에 !를 넣어야한다)

 

 

 

로그인을 해도 어드민이 아니라면 익셉션

 

 

어드민으로 로그인해서 접속하면 관리자페이지로 접속

 

 

위와 같이 컨트롤 해도 되나 익셉션을 통한 핸들링도 가능하다

핸들러 패키지 추가

 

 

(주석과 같이 익셉션별로 구분해야하나 지금은 Exception을 넣음)

 

 

익셉션을 throw 하면 이 파일로 연결되어 리턴

@ControllerAdvice를 어노테이션하면 throw 한 익셉션이 이 파일로 이동된다

그리고 @ExceptionHandler에 맞는 익셉션을 찾아서 함수로 진입한다

 

 

throw new Exception() 을 이용하여 익셉션을 개발자가 낚아채도록 한다

 

 

익셉션을 통한 권한체크

 

 

익셉션을 커스텀 하기 위해 파일 생성

 

 

Exception을 상속받는다

 

 

커스텀한 익셉션을 입력한다

 

 

익셉션 핸들러에도 커스텀한 익셉션을 적용한다

 

 

IO익셉션으로 설정해놓으면 터진다 ( 함수가 없기 때문(?))

 

 

 

----------

로그기록 api

https://sentry.io/welcome/

 

Application Monitoring and Error Tracking Software

Self-hosted and cloud-based error monitoring that helps software teams discover, triage, and prioritize errors in real-time.

sentry.io

-----------

 

https://blog.naver.com/getinthere/221718319587

 

springboot 8강 - Spring 인터셉터

인터셉터란 PPT아래와 같이 두 가지만 파일만 정의해주면 된다.config/WebMvcConfig.javaconfig/Ses...

blog.naver.com

 

핸들러는 인터셉터다

 

Spring+HandlerInterceptor.pptx
0.64MB

 

 

 

---

컨트롤러 - 뷰리졸버 발동 (@ResponseBody쓰면 미발동)

Rest컨트롤러 - 뷰리졸버 미발동

------

스프링 리퀘스트 라이프 사이클

-------------

 

 

Dispatcher Servlet 에서 FrontController 타고 Intercepter가 있으면 탄다

 

 

 

 

 

 

postHandle도 이용할 수 있으며 modelAndView 라는 객체도 가지고 있다

modelAndView 는 JSP에서의 모델이다
response 시 같이 가져가게된다

 

 

프리핸들러 - 세션 등을 확인

 

 

 

본문내용은 여기 까지 입니다.

-------------------------------------------

로그아웃

 

redirect: 를 사용하면 파일이 아닌 주소를 검색한다

 

-----------

 

글쓰기

 

세션 인터셉터에 등록

 

 

 

---------------------

디폴트로 만들어진 인터페이스는 구체화하지 않아도 오류가 나지 않는다

----------------

Log4J Logger

-------------

+ Recent posts