진행 중인 개인 프로젝트에 유저정보를 세션에 담아 사용하는 도중 컨트롤러에서 유저 정보를 너무 많은 곳에서 불러오게 되어 한 줄이지만 중복된 코드량이 많았다.
@GetMapping("/api")
public ResponseEntity<Void> resign() {
Long userSeq = (Long) session.getAttribute("userSeq");
service.method(userSeq);
return ResponseEntity.noContent().build();
}
Long userSeq = (Long) session.getAttribute("userSeq");
이 코드가 중복되는 코드인데, 유저 정보를 사용해야한다면 반드시 필요한 값이다.
위 같은 문제 때문에 인터셉터를 활용하여 중복된 코드를 줄여보기로 했다.
HandlerInterceptor 구현객체 생성
@Component
@RequiredArgsConstructor
public class HandlerInterceptor implements HandlerInterceptor {
private final HttpSession session;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Long userSeq = (Long) session.getAttribute("userSeq");
request.setAttribute("userSeq", userSeq);
return true;
}
}
인터셉터 등록
@Component
@RequiredArgsConstructor
public class InterceptorConfig implements WebMvcConfigurer {
private final SessionInjectionInterceptor sessionInjectionInterceptor;
registry.addInterceptor(sessionInjectionInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("필요하다면");
}
}
Controller 사용
@GetMapping("/resign")
public ResponseEntity<Void> resign(@RequestAttribute("userSeq") Long userSeq) {
userService.resign(userSeq);
session.invalidate();
return ResponseEntity.noContent().build();
}
한 줄평 : 이제 간단히 파라메터에 @RequestAttribute사용하여 중복 코드가 사라졌다.