본문 바로가기

스프링/Spring MVC

(14)
스프링 인터셉터를 사용해 로그인 인증 체크하기 스프링 인터셉터를 사용해 로그인 인증하는 것을 구현할 것입니다. 인터셉터 생성 @Slf4j public class LoginCheckInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String requestURI = request.getRequestURI(); log.info("인증 체크 인터셉터 실행 {}", requestURI); HttpSession session = request.getSession(false); if (session == n..
스프링 인터셉터를 사용해 요청 로그 확인하기 스프링 인터셉터 소개 스프링 인터셉터도 서블릿 필터와 같이 웹과 관련된 공통 관심 사항을 효과적으로 해결할 수 있는 기술입니다. 서블릿 필터가 서블릿이 제공하는 기술이라면, 스프링 인터셉터는 스프링 MVC가 제공하는 기술입니다. 둘 다 웹과 관련된 공통 관심 사항을 처리하지만, 적용되는 순서와 범위, 그리고 사용방법이 다릅니다. 스프링 인터셉터 흐름 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러 스프링 인터셉터는 디스패처 서블릿과 컨트롤러 사이에서 컨트롤러 호출 직전에 호출됩니다. 스프링 인터셉터에도 URL 패턴을 적용할 수 있는데, 서블릿 URL 패턴과는 다르고, 매우 정밀하게 설정할 수 있습니다. 스프링 인터셉터 제한 HTTP 요청 -> WAS -> 필터 -> ..
서블릿 필터 사용해 인증 체크하기 로그인되지 않은 사용자는 로그인이 필요한 여러 페이지에 접근을 하지 못해야 합니다. 여러 로직들은 인증이라는 공통 관심사를 가지고 있고 서블릿 필터를 사용해 해당 인증 기능을 공통적으로 적용하는 방법을 알아보겠습니다. 인증 체크 필터 만들기 @Slf4j public class LoginCheckFilter implements Filter { // 인증과 무관하게 항상 접근을 허용하는 요청 Url private static final String[] whitelist = {"/", "/members/add", "/login", "/logout", "/css/*"}; @Override public void doFilter(ServletRequest request, ServletResponse response..
서블릿 필터 사용해 요청 로그 남기기 공통 관심 사항 애플리케이션 여러 로직에서 공통으로 관심이 있는 있는 것을 공통 관심사(cross-cutting concern)라고 합니다. 만약 게시물을 관리하는 것을 로그인한 사용자에게만 허락한다면 게시물 등록, 수정, 삭제, 조회 등등 여러 로직에서 공통으로 인증에 대해서 관심을 가지고 있습니다. 웹과 관련된 공통 관심사를 처리할 때는 HTTP의 헤더나 URL의 정보들이 필요한데, 서블릿 필터나 스프링 인터셉터는 HttpServletRequest를 제공합니다. 서블릿 필터 소개 필터 흐름 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러 필터를 적용하면 필터가 호출된 다음에 서블릿이 호출됩니다. 그래서 모든 고객의 요청 로그를 남기는 요구사항이 있다면 필터를 사용하면 됩니다. 참고로 ..
세션 정보와 타임아웃 설정 세션 정보 확인 @Slf4j @RestController public class SessionInfoController { @GetMapping("/session-info") public String sessionInfo(HttpServletRequest request){ HttpSession session = request.getSession(false); if (session == null){ return "세션이 없습니다."; } session.getAttributeNames().asIterator() .forEachRemaining(name -> log.info("session name={}, value={}",name, session.getAttribute(name) )); log.info("s..
[SpringBoot] 세션 직접 만들어서 로그인 처리하기 스프링 부트에서 로그인을 처리하기 위해서는 서블릿이 지원하는 HttpSession을 사용하면 쉽게 구현이 가능합니다. 하지만 세션에 대한 이해도를 높이기 위해 직접 만들어보기로 하겠습니다. 이전에 웹브라우저와 서버 간에 로그인 상태를 유지하는 방법에 대해서 알아보겠습니다. 로그인 상태 유지하기 로그인 상태를 유지하기 위해 대표적으로 다음과 같은 방법이 있습니다. 1. 요청할 때 사용자 정보를 쿼리 파라미터로 전달하기 사용자 정보를 쿼리 파라미터를 계속 유지하면서 보내는 것은 매우 어렵고 번거로운 작업입니다. 게다가 식별 가능한 사용자 정보를 쿼리 파라미터에 노출하는 것은 보안상 위험합니다. 2. 쿠키에 사용자 정보 담아서 사용하기 서버에서 로그인에 성공하면 HTTP 응답에 쿠키를 담아서 브라우저에 전달합..