클라이언트에서 요청 시 Intercepter에서 Header에 담긴 AuthCode에 따라서 접근을 제한하는 예시
@Component
public class HeaderIntercepter extends HandlerInterceptorAdapter{
@Override
public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object handler)
throws Exception {
String headAuth = req.getHeader("X-Auth") == null ? "" : req.getHeader("X-Auth");
String authCode = "authCode";
if(headAuth.equals(authCode)) {
return true;
}else {
res.sendError(401, "Not Authorized");
return false;
}
}
}
1. 컨트롤러 진입 전에 유효성 검사를 해야 하기 때문에 preHandle을 Override 했다.
1) preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
- 컨트롤러 진입 직전에 동작
- 반환 값이 true일 경우 컨트롤러에 진입, false일 경우 실행이 멈춤
2) postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView
modelAndView)
- 컨트롤러 진입 후 view가 랜더링 되기 전에 동작
- 전달 인자의 modelAndView를 통해 조작 가능
3) afterComplete(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
- 컨트롤러 진입 후 view 랜더링 된 후 동작
2. AuthCode가 다른 경우 권한이 없기 때문에 401(권한 없음) 오류를 Response로 보냈다.
3. Intercepter를 사용하려면 WebMVCConfig를 설정해줘야 하는데 아래와 같이 하면 된다.
1) addInterceptor() Method의 인자에 생성한 intercepter를 넘겨주면 된다.
2) 나는 /api로 들어오는 모든 요청을 Intercepter 해야 했기 때문에 PathPatterns를 /api/**로 설정하였다. Intercepter가
필요한 요청만 추가해주면 된다.
ex) /api/users/**, /api/posts/** 등
@Configuration
public class WebMVCConfig implements WebMvcConfigurer {
@Autowired
HeaderIntercepter headerIntercepter;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(headerIntercepter).addPathPatterns("/api/**");
}
}
'개발 > Spring | Spring Boot' 카테고리의 다른 글
Spring Boot 특징 (0) | 2022.09.09 |
---|---|
Spring Boot에서 MailSender를 이용하여 Mail 발송하기. (0) | 2019.09.26 |
Spring Boot에서 JWT사용 법 (0) | 2019.09.25 |
JSON Web Token(JWT)란? (0) | 2019.09.25 |