SESSION (7) 썸네일형 리스트형 스프링 인터셉터에 ArgumentResolver 활용하기 지난번에 스프링 인터셉터로 로그인 인증을 구현했고, ArgumentResolver를 사용해 더 간단하게 구현하는 방법을 알아볼 예정입니다. 기존에 @SessionAttribute를 세션을 검증한 기능 @GetMapping("/") public String home(@SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member loginMember, Model model) { // 세션에 회원 데이터가 없으면 home if (loginMember == null) { return "home"; } model.addAttribute("member", loginMember); return "loginHome"; } ArgumentReso.. 스프링 인터셉터를 사용해 로그인 인증 체크하기 스프링 인터셉터를 사용해 로그인 인증하는 것을 구현할 것입니다. 인터셉터 생성 @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.. 서블릿 필터 사용해 인증 체크하기 로그인되지 않은 사용자는 로그인이 필요한 여러 페이지에 접근을 하지 못해야 합니다. 여러 로직들은 인증이라는 공통 관심사를 가지고 있고 서블릿 필터를 사용해 해당 인증 기능을 공통적으로 적용하는 방법을 알아보겠습니다. 인증 체크 필터 만들기 @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.. 세션 정보와 타임아웃 설정 세션 정보 확인 @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.. @SessionAttribute 어노테이션을 사용해서 세션 조회하기 @SessionAttribute 스프링은 세션을 더 편리하게 사용할 수 있도록 @SessionAttribute을 지원합니다. 이미 로그인된 사용자를 찾을 때는 다음과 같이 사용하면 된다. 참고로 이 기능은 세션을 생성하지 않습니다. @SessionAttribute(name = "loginMember", required = false) Member loginMember @GetMapping("/") public String homeLogin(@SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member loginMember, Model model) { // 세션에 회원 데이터가 없으면 home if (loginMember == nu.. [SpringBoot] 서블릿의 HttpSession을 사용해 세션 구현하기 HttpSession 소개 서블릿을 통해 HttpSession을 생성하면 다음과 같은 쿠키를 생성합니다. 쿠키 이름이 JSESSIONID이고, 값은 추정 불가능한 랜덤 값입니다. Cookie: JSESSIONID=5B78E23B513F50164D6FDD8C97B0AD05 HttpSession 사용 먼저 세션의 키로 사용될 문자열을 정의합니다. public class SessionConst { public static final String LOGIN_MEMBER = "loginMember"; } @PostMapping("/login") public String login(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult, HttpSer.. [SpringBoot] 세션 직접 만들어서 로그인 처리하기 스프링 부트에서 로그인을 처리하기 위해서는 서블릿이 지원하는 HttpSession을 사용하면 쉽게 구현이 가능합니다. 하지만 세션에 대한 이해도를 높이기 위해 직접 만들어보기로 하겠습니다. 이전에 웹브라우저와 서버 간에 로그인 상태를 유지하는 방법에 대해서 알아보겠습니다. 로그인 상태 유지하기 로그인 상태를 유지하기 위해 대표적으로 다음과 같은 방법이 있습니다. 1. 요청할 때 사용자 정보를 쿼리 파라미터로 전달하기 사용자 정보를 쿼리 파라미터를 계속 유지하면서 보내는 것은 매우 어렵고 번거로운 작업입니다. 게다가 식별 가능한 사용자 정보를 쿼리 파라미터에 노출하는 것은 보안상 위험합니다. 2. 쿠키에 사용자 정보 담아서 사용하기 서버에서 로그인에 성공하면 HTTP 응답에 쿠키를 담아서 브라우저에 전달합.. 이전 1 다음