안녕하세요 개발자 문문입니다.
오늘은 Spring MVC의 세션, 인터셉터, 쿠키에 대해 공부해보겠습니다.
로그인 상태를 유지하는 방법으로는 크게 세션과 쿠키 두가지 방법이 있습니다.
먼저 HttpSession을 사용하는 방법을 먼저 보겠습니다.
- HttpSession
@PostMapping
public String form(LoginCommand loginCommand, Errors errors, HttpSession session) {
...
@PostMapping
public String submit(LoginCommand loginCommand, Errors errors, HttpSevletRequest req) {
HttpSession session = req.getSession();
...
- HttpSession을 사용하는 두 가지 방법인데, 두 방법의 차이는 첫 번째 방법은 항상 HttpSession을 생성하지만, 두 번째 방법은 필요할 때만 생성할 수 있습니다.
- 주로 사용하는 메서드
- HttpSession.getSession() : 존재하는 세션을 불러오는 메서드 입니다.
- HttpSession.setAttribute("속성명", 객체) : 속성명의 속성에 객체를 저장합니다.
- HttpSession.getAttribute("속성명") : 세션에 "속성명"으로 저장된 객체를 불러옵니다. 세션이 유지되는 동안 불러올 수 있습 니다.
- HttpSession.invalidate() : 세션을 해제하는 메서드 입니다.
- 인터셉터
- HandlerInterceptor : 다수의 컨트롤러에 대해 동일한 기능을 적용할 때 사용할 수 있는 인터페이스 입니다.
- HandlerInterceptor는 컨트롤러 실행 전/ 실행 후, 뷰 실행전 / 뷰 실행 후 와 같이 세 시점에 공통 기능을 넣을 수 있습니다.
//컨트롤러 실행 전
boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;
//컨트롤러 실행 후, 뷰 실행 전
void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception;
//뷰 실행 후
void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception;
- preHandle : 컨트롤러 실행 전에 필요한 기능을 구현하고, 컨트롤러에서 필요로 하는 정보를 생성합니다.
- postHandle : 컨트롤러가 정상적으로 실행된 이후에 추가 기능을 구현할 때 사용합니다.
- afterCompletion : 뷰가 클라이언트에 응답을 전송한 뒤에 실행됩니다. 컨트롤러 실행중 익셉션 발생시 네 번째 파라미터로 전달됩니다. ex) 익셉션 로그 남기기, 실행 시간 기록
- HandlerInterceptor 설정
@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {
...
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authCheckInterceptor())
.addPathPatterns("/edit/**");
}
@Bean
public AuthCheckInterceptor authCheckInterceptor() {
return new AuthCheckInterceptor();
}
}
- addInterceptors() : 인터셉트를 설정하는 메서드로, AuthCheckInterceptor를 인터셉터로 설정하고, /edit/로 시작하는 모든 경로에 이 인터셉트를 적용합니다.
- 쿠키
- @CookieValue : HTTP 요청에 포함된 쿠키 값을 가져올 수 있게 해줍니다. (Cookie에 적용)
@GetMapping
public String form(LoginCommand loginCommand, @CookieValue(value="REMEMBER", required=false) Cookie rCookie) {
if(rCookie != null) {
loginCommand.setEmail(rCookie.getValue());
loginCommand.setRememberEmail(true);
}
return "login/loginForm";
}
- value : 쿠키의 이름 지정 , required : 필수 여부
- 쿠기 생성
@PostMapping
public String submit(LoginCommand loginCommand, Errors errors, HttpSession session, HttpServletResponse response) {
new LoginCommandValidator().validate(loginCommand, errors);
...
Cookie rememberCookie = new Cookie("REMEMBER", loginCommand.getEmail());
rememberCookie.setPath("/");
if(loginCommand.isRememberEmail()) {
rememberCookie.setMaxAge(60*60*24*30);
} else {
rememberCookie.setMaxAge(0);
}
response.addCookie(rememberCookie);
...
'Spring 개념정리' 카테고리의 다른 글
[Spring] MVC : 날짜 값 변환, @PathVariable, 익셉션 처리 (1) | 2025.07.08 |
---|---|
[Spring] MVC : 메시지, 커맨드 객체 검증 (0) | 2025.07.07 |
[Spring] MVC : 요청 매핑, 커맨드 객체, 리다이렉트, 모델 (2) | 2025.07.06 |
[Spring] 스프링 MVC 프레임워크 동작 방식 (0) | 2025.07.02 |
[Spring] AOP(Aspect Oriented Programming) (0) | 2025.07.01 |