본문 바로가기

Spring Boot

InterceptorHandler

HM (HandlerMapping)

 

 

TestController 생성

 

@RestController는 @ResponseBody를 안달아도 된다.

 

role은 권한이다.

user테이블에 role컬럼 추가하자

더보기
use spring;

select * from user;
DROP table comment;
DROP table post;
DROP table user;

CREATE TABLE user(
	id int auto_increment primary key,
    username varchar(100) unique not null,
    password varchar(100) not null,
    email varchar(100),
    profile varchar(200),
    role varchar(20),
    createDate timestamp
) engine=InnoDB default charset=utf8;
CREATE TABLE post(
	id int auto_increment primary key,
    title varchar(100) not null,
    content longtext,
    userId int,
    createDate timestamp,
    foreign key (userId) references user (id) on delete set null
) engine=InnoDB default charset=utf8;
CREATE TABLE comment(
	id int auto_increment primary key,
    userId int,
    postId int,
    content varchar(300) not null,
    createDate timestamp,
    foreign key (userId) references user (id) on delete set null,
    foreign key (postId) references post (id) on delete cascade
) engine=InnoDB default charset=utf8;

UPDATE user set role = 'ROLE_ADMIN' where username = 'root'; 
commit;

그럼 mapper에도 role을 추가해야 한다. 

 

 

UserService에서 user의 Role을 설정해줌

 

->mapper에서 수정(재사용성을 위함)안하고 service에서 동적으로 처리한다.

 

왜 ROLE_이 붙었냐면 나중에 시큐리티에서 사용하기 위함

 


WebMvcConfigurer

 

 

config 패키지에 WebConfig.java를 만든다.

 

 

 

implements WebMvcConfigurer를 하면 된다. (문서에 나옴)

 

지금은 WebMvcConfigurer라는 이름으로 사용하지만

인터셉터는 내부에 구현되어있어서 이름이 바뀔수도 있다.
이런것은 문서를 찾아보면 바뀌어도 금방 찾는다.

 

요새는 시큐리티라는 것을 쓴다.
시큐리티는 필터+인터셉터임

 

현재 TestController에는 페이지가 적어서 
인증을 하나마다 다 적어도 되지만

나중에 파일이 많아지는것을 대비해서

인터셉터를 배운다


AOP, Intercepter(인터셉터)

인터셉터 - 잠깐 낚아채서 하고 싶을 일을 함, AOP다!
->Dis-Servlet과 컨트롤러 사이에 있음. (함수 시작전에 발동됨)
스프링 내부에 구현이 되어있음

 

 

config에 aop 패키지를 만들고 두가지 클래스를 만든다.

 

AOP는 컨트롤러를 타고 함수가 실행되기 '전'과 '후'에 실행되는 공통적인 로직을 잘 만들어둬서

ex) preHandle(유효성검사),  postHandle(세션등록)을 인터셉터가하고

Service에 해당 함수에서는 내가 해야하는 로직에만 집중 할 수 있게 만들어준다.

 

즉 공통적으로 쓰이는 부분을 재사용하게끔 인터페이스로 만든다.

 

전 - preHandle
후 - postHandle

 

 

 

/user/** 로 오는 모든것을 여기서 관리한다.

 

 

 

/admin/** 로 오는 모든것을 여기서 관리한다.

 


handler

 

인증 안되어있으면 익셉션이 나타나게하고
이 익셉션을 낚아채는 핸들러를 만들것이다.

다양한 오류들이 발생하는데 각각의 컨트롤러에서 try catch하면 불편함

 

인터셉터와 같은것임.

 

 

@ControllerAdvice는 매우 중요하다. Exception을 낚아챈다.

@ExceptionHandler를 걸면서 Exception을 관리할수 있다.

이미 자바에 만들어져있는 Exception을 걸수도 있고

위와 같이 내가 만든 Exception에 걸수도 있다.

 

 

 

 


로그아웃


JUnit으로 test패키지에 접근해서 src에 접근해서 할 수 있음

로그를 파일, DB에 남김

요즘 대세는 로그를 API로 남긴다.
SENTRY API쓰면 로그를 SENTRY로 남김

 

요새는 시큐리티라는 것을 쓴다.
시큐리티는 필터+인터셉터임

 

 

 

 

 

 

 

root-context 
-메모리를 딱 한번만 띄워야하는 애들 tomcat시작 시(DB관련된일)

servlet-context 
-request할때 마다 메모리에 띄워줌. 객체만들려고 만들어둔 것(controller...)

 

 

 

 

 

 

 

 

 

Spring+HandlerInterceptor.pptx
0.64MB