본문 바로가기

Spring/Spring Web8

[Spring Web] HandlerMethodArgumentResolver로 로그인 처리하기 Spring Web - HandlerMethodArgumentResolver로 로그인 처리하기 서론 - 어노테이션으로 로그인 여부 확인하기 @GetMapping("/") public String homeLogin( @SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member loginMember, Model model) { //세션에 회원 데이터가 없으면 home if (loginMember == null) { return "home"; } //세션이 유지되면 로그인으로 이동 model.addAttribute("member", loginMember); return "loginHome"; } 위 코드처럼 @SessionAttrib.. 2022. 10. 12.
[Spring Web] API 예외 처리 Spring Web - API 예외 처리 서버가 API 요청을 받아서 응답을 줘야 하는 경우도 있다. 만약 이 때 예외 혹은 오류가 발생한다면 오류 페이지를 보여줘서는 안된다. 이 경우 미리 정해둔 API 스펙에 맞춰서 JSON 형태로 예외나 오류에 대한 정보를 담아 응답을 줘야 한다. 스프링 부트 API 예외 처리 - BasicErrorController 스프링 부트가 기본으로 등록해주는 BasicErrorController 의 코드를 살펴보면 API 예외 처리 기능도 제공하는 것을 확인할 수 있다. @RequestMapping(produces = MediaType.TEXT_HTML_VALUE) public ModelAndView errorHtml(HttpServletRequest request, Ht.. 2022. 10. 12.
[Spring Web] 예외 처리 & 에러 페이지 Spring Web - 예외 처리 & 에러 페이지 Servlet의 예외 처리 서블릿은 다음 2가지 방식으로 예외 처리를 지원한다. Exception 처리 response.sendError() Exception 처리 웹 애플리케이션은 사용자 요청마다 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행된다. 그런데 애플리케이션 실행 중 예외가 발생했는데, 예외를 잡지 못하고 서블릿 밖으로 까지 예외가 전달되면 어떻게 동작할까? WAS(여기까지 예외 전파) 2022. 10. 12.
[Spring Web] Filter & Interceptor Spring Web - Filter & Intercepter 서론 - 웹과 관련된 공통 관심사 해결하기 로그인을 한 사용자만 상품 관련된 페이지에 들어갈 수 있어야 한다고 하자. 만약 상품과 관련된 모든 컨트롤러(등록, 수정, 조회 등) 로직에서 공통으로 로그인 여부를 확인해야 한다면? 더 큰 문제는 향후 로그인과 관련된 로직이 변경될 때 생긴다. 작성한 모든 로직을 다 수정해야 한다. 이렇게 애플리케이션 여러 로직에서 공통으로 관심이 있는 있는 것을 공통 관심사(cross-cutting concern) 라고 한다. 여기서는 상품 등록, 수정, 삭제, 조회 등등 여러 로직에서 공통으로 인증에 대해서 관심을 가지고 있다. 이러한 공통 관심사는 스프링의 AOP로도 해결할 수 있지만, 웹과 관련된 공통 관심사.. 2022. 10. 12.
[Spring Web] Session & Cookie Spring Web - Session & Cookie 로그인 처리하기 - 세션 Stateless 한 HTTP의 특성상, 로그인 같은 기능을 구현하기 위해서는 서버와 클라이언트 사이의 연결을 유지할 수 있는 방법이 필요하다. 그렇다고 클라이언트의 로그인 상태를 유지하기 위해 모든 HTTP request 마다 ID와 비밀번호를 전달받을 수는 없는 노릇이다. 이는 보안상으로도 문제가 될 수 있다. 따라서 보안상의 문제를 해결하기 위해서는 클라이언트의 중요한 정보를 모두 서버에 저장해야 한다. 그리고 클라이언트와 서버는 추정 불가능(Brute-forcing이 불가능)한 임의의 식별자 값으로 연결해야 한다. 이 식별자로는 값 자체만으로는 어떠한 의미도 가지지 않는 UUID를 사용할 수 있다. 이렇게 서버에 중요한.. 2022. 10. 12.