Spring 7

[Spring] 웹 스코프(request scope) 와 Provider / 프록시

웹 스코프의 특징 웹 스코프는 웹 환경에서만 동작합니다 웹 스코프는 프로토타입과 다르게 스프링이 해당 스코프의 종료 시점까지 관리하기에 종료 메서드가 호출됩니다 웹 스코프의 종류 request : HTTP 요청 하나가 들어오고 나갈 떄 까지 유지되는 스코프, 각각의 HTTP 요청마다 별도의 빈 인스턴스가 생성되고, 관리됩니다 session : HTTP Session과 동일한 생명주기를 가지는 스코프 application : 서블릿 컨텍스트(ServletContext)와 동일한 생명주기를 가지는 스코프 websocket : 웹 소켓과 동일한 생명주기를 가지는 스코프 학습 내용에 따라 requset 스코프를 기준으로 다루어 보겠습니다. 나머지는 범위만 다르고 동작 방식은 비슷합니다 그림과 같이 클라이언트 A..

Spring 2021.11.30

[Security] Remember Me 인증 필터 (RememberMeAuthenticationFilter)

rememberMe기능을 활성화하여 로그인할 경우 사용자는 인증 객체를 담은 session과 함께 remember-me 쿠키를 받아 자원에 접근하게 된다. * rememberMe의 다양한 설정의 api들은 차후에 다뤄보자. 이후로 사용자의 세션이 만료되거나 사용자 브라우저 종료로 인하여 세션이 끊긴 경우 즉, 세션이 활성화되지 않아 인증 객체를 SecurityContext에서 찾지 못하는 경우 자동적으로 사용자의 인증을 유지하기 위하여 RememberMeAuthenticationFilter가 실행된다. 즉, 정리해보면 다음과 같이 2가지 조건이 충족해야 RememberMeAuthenticationFilter가 실행된다. * 필터가 작동하는 경우 1. Authentication 객체가 null일 경우. (..

Spring Security 2021.10.05

[Security] Form Login 인증 필터 (UsernamePasswordAuthenticationFilter)

사용자가 로그인을 실행하면 인증처리가 이루어지는데 인증처리를 담당하고 그에 관련된 요청을 처리하는 필터가 UsernamePasswordAuthenticationFilter 이다. UsernamePasswordAuthenticationFilter 내부적으로 각각의 인증처리의 역할에 따라서 여러 클래스를 호출하여 처리하게 되며 전체적인 인증처리의 흐름을 살펴보자. 1. 인증 처리 전 작업 우선 처음 사용자 인증 시도를 하면 UsernamePasswordAuthenticationFilter가 요청을 받는다 그리고 AntPathRequestMatcher(/login)에서 사용자가 요청한 요청 정보가 매칭이 되는지 확인한다. (Default는 "/login"이다.) 매칭 실패 시 chain.doFilter으로 호..

Spring Security 2021.10.04

[Spring] HiddenHttpMethodFilter로 GET,POST를 DELETE,PUT등 으로 받기_Spring Boot설정

브라우저 VIEW단에서 서버로 데이터를 전송할 경우 FORM으로 GET 또는 POST로 전송이 가능하다. FORM에서 전송된 GET 또는 POST 타입은 서버에서 @GetMapping 또는 @PostMapping으로 받을 수 있지만 나머지 DELETE, PUT, PATCH 타입들은 FORM에서 지원하지 않기 떄문에 기존에는 ajax로 타입을 명시하여 전달한 후 @DeleteMapping, @PutMapping, @PatchMapping으로 받았었다. 하지만 HiddenHttpMethodFilter를 사용하면 기존 FORM 방식으로 전송하고 서버에서는 원하는 타입으로 받을 수 있다. 즉, VIEW단에서 기존 FORM의 GET 또는 POST로 전송한 후 서버에서 PUT, DELETE, PATCH등으로 타입을..

Spring 2021.08.26

[Spring] HTTP 메시지 컨버터 (HttpMessageConverter)

HTTP 메시지 컨버터 HTTP 메시지 컨버터란 기존의 뷰 템플릿으로 HTML을 생성해서 응답하는 것이 아니라 HTTP API(REST API)처럼 JSON형식의 데이터 메시지바디를 직접 읽거나 쓰기 위해 메시지 본문을 다루는 방식을 말한다. 스프링 MVC는 다음의 경우에 HTTP 메시지 컨버터를 적용한다. HTTP 요청: @RequestBody , HttpEntity(RequestEntity) HTTP 응답: @ResponseBody , HttpEntity(ResponseEntity) 기존의 요청 URL 파라미터, HTML Form방식에서의 viewResolver대신 HttpMessageConverter이 동작하게 된다. 스프링 부트 기본 메시지 컨버터 (우선순위 순) 1. ByteArrayHttpMe..

Spring 2021.08.02

[Spring] 다양한 요청 매핑(Request Mapping)

다양한 요청 매핑 테스트 환경 1. 로그 출력은 시스템 콘솔 대신 slf4j 로깅 라이브러리 사용 2. view 템플릿 없이 매핑 결과만 테스트하기 위해 RestController사용하여 return값 그대로 화면에 출력 3. 모든 테스트는 Postman 플랫폼으로 테스트 기본 어노테이션 매핑 @RestController public class MappingController { private Logger log = LoggerFactory.getLogger(getClass()); /** * 기본 요청 * 둘다 허용 /hello-basic, /hello-basic/ * HTTP 메서드 모두 허용 GET, HEAD, POST, PUT, PATCH, DELETE */ @RequestMapping(value ..

Spring 2021.08.01

[Spring] 빈 생명주기(Lifecycle) 콜백 - 3가지 방법

Spring Container은 Bean객체들의 생성과 소멸을 관리한다. -> 생명주기(Lifecycle)을 관리한다. 스프링 빈은 간단하게 다음과 같은 라이프사이클을 갖는다. 객체 생성 -> 의존관계 주입 (생성자주입은 예외 : 객체를 만들 때 파라미터로 빈이 미리 들어와야 하기 때문에) 스프링 빈의 이벤트 라이프사이클 (싱글톤) 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸전 콜백 -> 스프링 종료 * 초기화 콜백 : 빈이 생성되고, 빈의 의존관계 주입이 완료된 후 호출 * 소멸전 콜백 : 빈이 소멸되기 직전에 호출 * 객채의 생성과 초기화를 명확하게 분리하는 것이 좋다. 객체 생성은 메모리에 할당하는 것 까지만, 최소 필요한 데이터를 셋팅 하는..

Spring 2021.07.06