Spring
스프링 MVC 2 - 서블릿 필터 - 요청 로그
스프링 MVC 2 - 서블릿 필터 - 요청 로그
2022.09.21서블릿 필터 - 요청 로그 필터가 정말 수문장 역할을 잘 하는지 확인하기 위해 가장 단순한 필터인, 모든 요청을 로그로 남기는 필터를 개발하고 적용해보자. LogFilter - 로그 필터 public class LogFilter implements Filter {} 필터를 사용하려면 필터 인터페이스를 구현해야 한다. doFilter(ServletRequest request, ServletResponse response, FilterChain chain) HTTP 요청이 오면 doFilter가 호출된다. ServletRequest request는 HTTP 요청이 아닌 경우까지 고려해서 만든 인터페이스이다. HTTP를 사용하면 HttpServletRequest httpRequest = (HttpServlet..
스프링 MVC 2 - 서블릿 필터 - 소개
스프링 MVC 2 - 서블릿 필터 - 소개
2022.09.21서블릿 필터 - 소개 공통 관심 사항 요구사항을 보면 로그인 한 사용자만 상품 관리 페이지에 들어갈 수 있어야 한다. 앞에서 로그인을 하지 않은 사용자에게는 상품 관리 버튼이 보이지 않기 때문에 문제가 없어 보인다. 그런데 문제는 로그인 하지 않은 사용자도 다음 URL을 직접 호출하면 상품 관리 화면에 들어갈 수 있다는 점이다. http://localhost:8080/items 상품 관리 컨트롤러에서 로그인 여부를 체크하는 로직을 하나하나 작성하면 되겠지만, 등록, 수정, 삭제, 조회 등등 상품관리의 모든 컨트롤러 로직에 공통으로 로그인 여부를 확인해야 한다. 더 큰 문제는 향후 로그인과 관련된 로직이 변경될 때 이다. 작성한 모든 로직을 다 수정해야 할 수 있다. 이렇게 애플리케이션 여러 로직에서 공통..
스프링 MVC 2 - 정리(로그인 처리1 - 쿠키, 세션)
스프링 MVC 2 - 정리(로그인 처리1 - 쿠키, 세션)
2022.09.20정리(로그인 처리1 - 쿠키, 세션) 로그인 요구사항 프로젝트 생성 패키지 구조 설계는 항상 web에서 domain으로 의존관계가 흐르도록 단방향으로 설계해야 한다. 즉, web은 domain을 알고있지만, domain은 web을 모르도록 설계해야 한다. 이렇게 하면 web 패키지를 모두 삭제해도 domain에는 전혀 영향이 없다. 홈 화면 회원 가입 로그인 기능 로그인 처리하기 - 쿠키 사용 로그인을 하면 서버에 id, password를 넘기고 서버는 쿠키에 회원의 memberId를 넘겨서 보냇다. 이렇게 쿠키만으로 세션이 유지되는 방식처럼 처리를 하니까 문제가 있었다. 쿠키와 보안 문제 쿠키 값은 임의로 변경할 수 있다. 쿠키에 보관된 정보는 훔쳐갈 수 있다. 해커가 쿠리를 한번 훔쳐가면 평생 사용할..
스프링 MVC 2 - 세션 정보와 타임아웃 설정
스프링 MVC 2 - 세션 정보와 타임아웃 설정
2022.09.20세션 정보와 타임아웃 설정 세션 정보 확인 세션이 제공하는 정보들을 확인해보자. SessionInfoController sessionId : 세션Id, JSESSIONID의 값이다. 예)34B14F008AA3527C9F8ED620EFD7A4E1 maxInactiveInterval : 세션의 유효 시간, 예) 1800초, (30분) creationTime : 세션 생성일시 lastAccessedTime : 세션과 연결된 사용자가 최근에 서버에 접근한 시간, 클라이언트에서 서버로 sessionId(JSESSIONID)를 요청한 경우에 갱신된다. isNew : 새로 생성된 세션인지, 아니면 이미 과거에 만들어졌고, 클라이언트에서 서버로 sessionId(JSESSIONID)를 요청해서 조회된 세션인지 여부 세..
스프링 MVC 2 - 로그인 처리하기 - 서블릿 HTTP 세션2
스프링 MVC 2 - 로그인 처리하기 - 서블릿 HTTP 세션2
2022.09.19로그인 처리하기 - 서블릿 HTTP 세션2 @SessionAttribute 스프링은 세션을 더 편리하게 사용할 수 있도록 @SessionAttribute을 지원한다. 이미 로그인 된 사용자를 찾을 때는 다음과 같이 사용하면 된다. 참고로 이 기능은 세션을 생성하지 않는다. @SessionAttribute(name = "loginMember", required = false) Member loginMember HomeController - homeLoginV3Spring() homeLoginV3()의 @GetMapping("/") 주석 처리 세션을 찾고, 세션에 들어있는 데이터를 찾는 번거로운 과정을 스프링이 한번에 편리하게 처리해주는 것을 확인할 수 있다. TrackingModes 로그인을 처음 시도하면..
스프링 MVC 2 - 로그인 처리하기 - 서블릿 HTTP 세션1
스프링 MVC 2 - 로그인 처리하기 - 서블릿 HTTP 세션1
2022.09.19로그인 처리하기 - 서블릿 HTTP 세션1 세션이라는 개념은 대부분의 웹 애플리케이션에 필요한 것이다. 어쩌면 웹이 등장하면서 부터 나온 문제이다. 서블릿은 세션을 위해 HttpSession이라는 기능을 제공하는데, 지금까지 나온 문제들을 해결해준다. 우리가 직접 구현한 세션의 개념이 이미 구현되어 있고, 더 잘 구현되어 있다. HttpSession 소개 서블릿이 제공하는 HttpSessionㄷ 결국 우리가 직접 만든 SessionManager와 같은 방식으로 동작한다. 서블릿을 통해 HttpSession을 생성하면 다음와 같은 쿠키를 생성한다. 쿠키 이름이 JSESSIONID이고, 값은 추정 불가능한 랜덤 값이다. Cookie: JSESSIONID=5B78E23B513F50164D6FDD8C97B0AD..