Servlet Filter 사용해서 인증체크
Servlet Filter란?
공통적인 기능을 서블릿이 호출되기 전 혹은 호출되고 난 뒤에 수행하기 위해서 사용한다.
사용자 인증이나, 로깅과 같은 공통 기능들을 처리하기 위해서 사용한다.
LoginFilter - 로그인 필터
@Slf4j
public class LoginCheckFilter implements Filter {
private static final String[] whitelist = {"/", "/members/add", "/login", "/logout", "/css/*"};
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
String requestURI = httpRequest.getRequestURI();
HttpServletResponse httpResponse = (HttpServletResponse) response;
try {
log.info("인증 체크 필터 시작{}", requestURI);
if (isLoginCheckPath(requestURI)) {
log.info("인증 체크 로직 실행{}", requestURI);
HttpSession session = httpRequest.getSession();
if (session == null || session.getAttribute(SessionConst.LOGIN_MEMBER) == null) {
log.info("미인증 사용자 요청 {}", requestURI);
//로그인으로 redirect
httpResponse.sendRedirect("/login?redirectURL=" + requestURI);
return;
}
}
chain.doFilter(request, response);
} catch (Exception e) {
throw e;
} finally {
log.info("인증 체크 필터 종료 {}", requestURI);
}
}
/**
* 화이트 리스트의 경우 인증 체크 X
*/
private boolean isLoginCheckPath(String requestURI) {
return !PatternMatchUtils.simpleMatch(whitelist, requestURI);
}
}
스프링 인터셉터
인터셉터란?
컨트롤러의 핸들러를 호출하기 전과 후에 요청과 응답을 참조하거나 가공할 수 있는 일종의 필터
LoginCheckInterceptor
@Slf4j
public class LoginCheckInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String requestURI = request.getRequestURI();
log.info("인증 체크 인터셉터 실행 {}", requestURI);
HttpSession session = request.getSession(false);
if (session == null || session.getAttribute(SessionConst.LOGIN_MEMBER)
== null) {
log.info("미인증 사용자 요청");
//로그인으로 redirect
response.sendRedirect("/login?redirectURL=" + requestURI);
return false;
}
return true;
}
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LogInterceptor())
.order(1)
.addPathPatterns("/**")
.excludePathPatterns("/css/**", "/*.ico", "/error");
//패턴을 세밀하거 설정이 가능하다.
registry.addInterceptor(new LoginCheckInterceptor())
.order(2)
.addPathPatterns("/**")
.excludePathPatterns(
"/", "/members/add", "/login", "/logout",
"/css/**", "/*.ico", "/error"
);
}
@preHandle 메서드를 사용해서 컨트롤러가 호출되기 전에 로그인 여부를 확인할 수 있다.
출처
[인프런] 스프링 MVC 2편 - 백엔드 웹 개발 핵심 기술
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2/dashboard
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의
웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습할 수 있
www.inflearn.com
Servlet Filter
https://docs.oracle.com/cd/B14098_01/web.1012/b14017/filters.htm
Servlet Filters and Event Listeners
Servlet filters are used for preprocessing Web application requests and postprocessing responses, as described in the following sections: Overview of Servlet Filters When the servlet container calls a method in a servlet on behalf of the client, the HTTP r
docs.oracle.com
'WEB > Spring 인강' 카테고리의 다른 글
[Spring] 스프링 공부 #32 (0) | 2022.04.21 |
---|---|
[Spring] 스프링 공부 #31 (0) | 2022.04.20 |
[Spring] 스프링 공부 #29 (0) | 2022.04.17 |
[Spring] 스프링 공부 #28 (0) | 2022.04.15 |
[Spring] 스프링 공부 #27 (0) | 2022.04.14 |