※ 인터셉터 Interceptor
로그인 후 접속 가능한 페이지들 ex) 내 정보, 내 주문내역, 장바구니 etc
은 비로그인 상태로 접속 시도 시 로그인 페이지로 이동하도록 인터셉터 구현
1. LoggerInterceptor 클래스 생성해서 인터셉터 조건 생성 / 인터셉터로 이동할 url 설정
2. webconfig 클래스 생성해서 인터셉터가 적용될 url 설정
▷ HandlerInterceptor 를 implements 한 LoggerInterceptor 클래스 생성
public class LoggerInterceptor implements HandlerInterceptor {
▷ preHandle 메서드를 오버라이딩 하여 session 체크
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
▷ session 값 존재하지 않으면 alert 과 함께 로그인 페이지로 이동
if (session == null || session.getAttribute("id") == null) {
log.info("로그인 필요");
msg ="로그인 후 이용가능한 서비스입니다";
url = "location.href = '" + request.getContextPath() + "/login';";
log.info("request.getContextPath()={}",request.getContextPath());
log.info("url={}",url);
▶ LoggerInterceptor.java 전체 코드
@Slf4j
public class LoggerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
HttpSession session = request.getSession(false);
String msg = "", url = "";
if (session == null || session.getAttribute("id") == null) {
log.info("로그인 필요");
msg ="로그인 후 이용가능한 서비스입니다";
url = "location.href = '" + request.getContextPath() + "/login';";
log.info("request.getContextPath()={}",request.getContextPath());
log.info("url={}",url);
log.info("현재 위치 : " + request.getRequestURI());
String requestURI = request.getRequestURI();
Cookie cookie = new Cookie("tempURL", requestURI);
cookie.setPath("/");
cookie.setMaxAge(60*3); //3분동안
response.addCookie(cookie);
response.setContentType("text/html; charset = UTF-8");
PrintWriter out = response.getWriter();
out.print("<script type='text/javascript'>");
out.print("alert('" + msg + "');");
out.print(url);
out.print("</script>");
return false;
}
return true;
}
▶ WebConfig 클래스 생성해서 비로그인 상태로 접근가능 / 불가능한 url 설정해주기
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoggerInterceptor())
.addPathPatterns("/cart/**")
.addPathPatterns("/item/**")
.addPathPatterns("/mypage/**")
.addPathPatterns("/order/**")
.excludePathPatterns("/item/detail/**");
}
}
비로그인 상태로 접근 가능한 페이지는 몇개 안되기때문에
addPathPatterns(/**) 설정하고, excludePathPatterns 로 접근 가능한 페이지 몇개만 설정하고 싶었으나
카카오 로그인 시 외부로 이동하는 경로가 있어서
그냥 api 를 수정하고 addPathPatterns 에 넣음
※ Error Page
완전 신기하고 편리한 SpringBoot 의 기능
▷ resources > static 경로에 ' Error ' 이름의 폴더를 생성하고 그 안에 404.html, 500.html 파일을 생성해서 에러페이지를 디자인하면 404,500 코드를 받았을 때 자동으로 해당 페이지가 response 됨
'프로젝트' 카테고리의 다른 글
[SpringBoot & JPA 프로젝트] 사용자 / 판매자 카카오 로그인하기 (0) | 2022.09.29 |
---|---|
[SpringBoot & JPA 프로젝트] 배포 후 실제 웹서비스 운영 단계로 나아가기 (0) | 2022.09.28 |
[SpringBoot & JPA 프로젝트] 주문테이블 설계 (0) | 2022.09.05 |
[SpringBoot & JPA 프로젝트] 장바구니에 상품 추가하기 / 삭제하기 (0) | 2022.08.25 |
[SpringBoot & JPA 프로젝트] 판매자 : 상품삭제하기 (delFlag) (0) | 2022.08.24 |