InterCeptorConfig.java
package kr.co.gudi.config;
import java.util.ArrayList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import kr.co.gudi.utils.LoginCheck;
@Configuration // 설정 클래스라는 의미
public class InterCeptorConfig implements WebMvcConfigurer {
@Autowired LoginCheck check;
@Override
public void addInterceptors(InterceptorRegistry registry) {
// registry에 인터셉터 할 여러 내용이 추가 된다.
ArrayList<String> excludeList = new ArrayList<String>();
// 일반적으로 메인,로그인,css,회원가입과 관련된 url을 제외시킨다
excludeList.add("/");
excludeList.add("/login*");
excludeList.add("/resources/**"); //** 디렉토리 이후 모든 경로는 다
excludeList.add("/join*"); // *하나는 그냥 url 요청
excludeList.add("/*.ajax"); // ajax로 끝나는 요청은 예외
// 다형성에 의해 HandlerInterceptor 인터페이스를 구현받은 LoginCheck 가 들어갈 수 있땅
registry.addInterceptor(check) // 1. 실행할 클래스
.addPathPatterns("/**") // 2. 인터셉터를 적용할 url pattern
.excludePathPatterns(excludeList); // 3.예외 패턴
}
}
LoginCheck.java
package kr.co.gudi.utils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
@Component
public class LoginCheck implements HandlerInterceptor {
Logger logger = LoggerFactory.getLogger(getClass());
// preHandle : Controller 전에 이곳을 지나친다.
// return type이 boolean이다.
// true : Controller 접근 허용 / false : Controller 접근 불가
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
logger.info("preHandler : " + request.getRequestURI());
// Controller로 가기전에 세션 검사를 해줄 것
boolean pass = true;
HttpSession session = request.getSession();
if(session.getAttribute("loginId")==null) {
response.sendRedirect("/");
pass = false; // 단순히 거절만 해버리면 갈 곳이 없음 == 흰화면
}
return pass;
}
// postHandler : Controller를 지나간 이후에 이곳에 들른다.
// request / response 객체에 추가로 무언가를 담을 때 사용
// ModelAndView 에 무언가 추가 할 사용 (**)
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView mav) throws Exception {
logger.info("postHandler" );
String loginId = (String) request.getSession().getAttribute("loginId");
String content = "<div>안녕하세요"+loginId+"님! <a href=\"logout.do\">[로그아웃]</a></div>";
mav.addObject("loginBox",content);
}
}