일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- HTTP상태코드
- etag
- 캐시
- resolveArgument
- hikaricp
- 쿠키생명주기
- HTTP API
- must revalidate
- gradle오류
- Not Modified
- UrlResource
- no cache
- http
- 서블릿http세션
- 쿠키보안문제
- 프록시 캐시 서버
- 세션타임아웃설정
- 300
- www-Authenticate
- 프록시객체
- 인증체크
- 조건부요청
- 세션만들어보기
- 검증헤더
- 서블릿필터
- max age
- supportParameter
- Expires
- 양쪽 모두 값 설정
- Could not find or load main class worker.org.gradle.process.internal.worker.GradleWorkerMain
- Today
- Total
목록SpringMVC (7)
복습을 위한
ArgumentResolver 스프링에서 애노테이션 기반의 컨트롤러는 매우 다양한 파라미터를 사용할 수 있다. HttpServletRequest , Model 은 물론이고, @RequestParam , @ModelAttribute 같은 애노테이션 그리고 @RequestBody , HttpEntity 같은 HTTP 메시지를 처리하는 부분까지 매우 큰 유연함을 보여준다. 그럼 그걸 누가처리해줄까? 수많은 파라미터를 입맛에 맞게 누가 처리해줄까? 이렇게 다양한 파라미터를 유연하게 처리할 수 있는 이유가 바로 ArgumentResolver 덕분이다. 애노테이션 기반 컨트롤러를 처리하는 RequestMappingHandlerAdapter 는 바로 이 ArgumentResolver 를 호출해서 컨트롤러(핸들러)가 ..

스프링 인터셉터도 서블릿 필터와 같이 웹과 관련된 공통 관심 사항을 효과적으로 해결할 수 있는 기술이다. 서블릿 필터가 서블릿이 제공하는 기술이라면, 스프링 인터셉터는 스프링 MVC가 제공하는 기술이다. 둘다 웹과 관련 된 공통 관심 사항을 처리하지만, 적용되는 순서와 범위, 그리고 사용방법이 다르다. 스프링 인터셉터 흐름 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러 스프링 인터셉터는 디스패처 서블릿과 컨트롤러 사이에서 컨트롤러 호출 직전에 호출 된다. 스프링 인터셉터는 스프링 MVC가 제공하는 기능이기 때문에 결국 디스패처 서블릿 이후에 등장하게 된다. 스프링 MVC의 시작점이 디스패처 서블릿이라고 생각해보면 이해가 될 것이다. 스프링 인터셉터에도 URL 패턴을..
웹과 관련된 공통 관심사를 처리할 때 서블릿 필터를 사용한다. 예를 들어 로그인을 한 사용자만이 특정페이지에 접근을 할 수 있어야한다를 만족시키고싶을 때같은 경우이다. 필터 흐름 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러 필터를 적용하면 필터가 호출 된 다음에 서블릿이 호출된다. 그래서 모든 고객의 요청 로그를 남기는 요구사항이 있다면 필터를 사용하면 된다. 참고로 필터는 특정 URL 패턴에 적용할 수 있다. /* 이라고 하면 모든 요청에 필터가 적용된다. 참고로 스프링을 사용하는 경우 여기서 말하는 서블릿은 스프링의 디스패처 서블릿으로 생각하면 된다. 필터체인 HTTP 요청 -> WAS -> 필터1 -> 필터2 -> 필터3 -> 서블릿 -> 컨트롤러 필터는 체인으로 구성되는데, 중..
스프링 부트로 글로벌 설정 application.properties server.servlet.session.timeout=60 : 60초, 기본은 1800(30분) (글로벌 설정은 분 단위로 설정해야 한다. 60(1분), 120(2분), ...) 전체 세션에 대한 글로벌설정은 application.properties에서 위 코드로 시간을 설정해주면된다. (최소60) 위 코드대로라면 마지막요청 기준으로 세션을 60초 유지를 해주겠다는 뜻이다. 세션생성시점이 아니라 최근요청한 시간 기준으로의 시간이다.! 만약 전체 세션이 아니라 특정 세션 단위로 따로 설정을 하고 싶다면 java코드에서 직접 아래코드로 지정해주자. session.setMaxInactiveInterval(1800); //1800초
서블릿은 세션을 위해 HttpSession 이라는 기능을 제공하는데 전블로그에서 직접 구현한 세션의 개념이 이미 구현되어 있고, 더 잘 구현되어 있다. HttpSession 소개 서블릿이 제공하는 HttpSession 도 직접 만든 SessionManager 와 같은 방식으로 동작한다. 서블릿을 통해 HttpSession 을 생성하면 다음과 같은 쿠키를 생성한다. 쿠키 이름이 JSESSIONID 이고, 값은 추정 불가능한 랜덤 값이다. Cookie: JSESSIONID=5B78E23B513F50164D6FDD8C97B0AD05 @PostMapping("/login")//HTTP세션활용 public String loginV3(@Valid @ModelAttribute LoginForm form, Bindin..

쿠키를 사용해서 로그인Id를 전달해서 로그인을 유지할 수 있다. 그런데 이것은 심각한 보안 문제가 있다. 보안 문제 쿠키 값은 임의로 변경할 수 있다. 클라이언트가 쿠키를 강제로 변경하면 다른 사용자가 되고 쿠키에 보관된 정보는 훔쳐갈 수 있다. 만약 쿠키에 개인정보나, 신용카드 정보가 있다면? 이 정보가 웹 브라우저에도 보관되고, 네트워크 요청마다 계속 클라이언트에서 서버로 전달된다. 쿠키의 정보가 나의 로컬 PC에서 털릴 수도 있고, 네트워크 전송 구간에서 털릴 수도 있다. 해커가 쿠키를 한번 훔쳐가면 평생 사용할 수 있다. 해커가 쿠키를 훔쳐가서 그 쿠키로 악의적인 요청을 계속 시도할 수 있다. 대안 쿠키에 중요한 값을 노출하지 않고, 사용자 별로 예측 불가능한 임의의 토큰(랜덤 값)을 노출하고, ..