Project/블로그 게시판 만들기
SpringInterceptor
Seung__
2021. 10. 15. 00:00
- 현재 비 로그인 유저의 권한이 없는 페이지 접근을 막기 위해
- controller각 메서드에 검증 로직이 추가되어 있다.
- 사실 controller의 대부분 메서드는 비 로그인 유저가 호출할 권한이 없어야 한다.
- 이는 공통적인 부분으로 일일히 각 메서드에 추가해주기는.. 번거롭다.
- Spring Interceptor는 이와 같이 Web에서 공통적인 관심사를 처리하는데 용이하다.
[로그인] 스프링 인터셉터
스프링 인터셉터는 서블릿 필터와 같이 웹과 관련된 공통 관심 사항을 효과적으로 해결할 수 있는 기술 해당 기능을 Servlet이 제공하면 ServletFilter, Spring MVC가 제공하는 것은 Spring Iterceptor 웹과 관
bsh-developer.tistory.com
1. LoginCheckInterceptor
- 나중에 로그인 후 현재 페이지로 돌아오기 위해 현재 uri를 queryParameter로 넘겨줌.
@Slf4j
@RequiredArgsConstructor
public class LoginCheckInterceptor implements HandlerInterceptor {
private final SessionManager sessionManager;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String requestURI = request.getRequestURI();
log.info("login 인증 체그 interceptor 실행");
MemberDto loginMember = (MemberDto) sessionManager.getSession(request);
if (loginMember == null){
log.info("비로그인 자용자 접속 시도");
response.sendRedirect("/login?redirectURL="+requestURI);
return false;
}
return true;
}
}
2. Interceptor 등록
- excludePathPattern은 해당 interceptor를 사용하지 않을 경로를 지정한다.
@Configuration
@RequiredArgsConstructor
public class WebConfig implements WebMvcConfigurer {
private final SessionManager sessionManager;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginCheckInterceptor(sessionManager))
.order(1)
.addPathPatterns("/**")
.excludePathPatterns("/css/**", "/*.ico", "/error",
"/", "/members/new/form", "/posts", "/posts/*",
"/login", "/logout");
}
}
3. 결과
- 비로그인 상태 "게시글 목록" 접근
2021-10-14 23:55:15.678 INFO 31528 --- [nio-8080-exec-7] hello.blog.web.PostFormController
: 비 로그인 사용자 접속
- 비로그인 상태, 게시글 수정 접근 시 로그인 화면으로 이동
2021-10-14 23:56:56.114 INFO 31528 --- [nio-8080-exec-3] h.b.w.interceptor.LoginCheckInterceptor
: login 인증 체그 interceptor 실행 2021-10-14 23:56:56.624 WARN 31528 --- [nio-8080-exec-3]
2021-10-14 23:56:56.626 INFO 31528 --- [nio-8080-exec-3] h.b.w.interceptor.LoginCheckInterceptor
: 비로그인 자용자 접속 시도
- 이처럼 WEB에서 가지고 있는 공통 관심사는 SpringInterceptor를 활용하도록 하자..
4. GitHub: 211014 interceptor
GitHub - bsh6463/blog
Contribute to bsh6463/blog development by creating an account on GitHub.
github.com