728x90
- 스프링 시큐리티는 다양한 프레임워크 및 API 와의 통합을 제공하고 있으며 Servlet 3과 Spring MVC 와 통합을 통해 여러 편리한 기능들을 사용 가능
- 인증 관련 기능들을 필터가 아닌 서블릿 영역에서 처리 가능
Servlet3+ 통합
- SecurityContextHolderAwareRequestFilter
- HTTP 요청이 처리될 때 HttpServletRequest에 보안 관련 메소드를 추가적으로 제공하는 래퍼(SecurityContextHolderAwareRequestWrapper) 클래스를 적용
- 이를 통해 개발자는 서블릿 API 의 보안 메소드를 사용하여 인증, 로그인, 로그아웃 등의 작업을 수행 가능
- HttpServlet3RequestFactory
- Servlet 3 API 와의 통합을 제공하기 위한 Servlet3SecurityContextHolderAwareRequestWrapper 객체를 생성
→ Servlet3SecurityContextHolderAwareRequestWrapper는 SecurityContextHolderAwareRequestWrapper 클래스를 상속 받음
- Servlet 3 API 와의 통합을 제공하기 위한 Servlet3SecurityContextHolderAwareRequestWrapper 객체를 생성
- Servlet3SecurityContextHolderAwareRequestWrapper
- HttpServletRequest의 래퍼 클래스로서 Servlet 3.0의 기능을 지원하면서 동시에 SecurityContextHolder와의 통합을 제공
→ SecurityContextHolder와 통합을 제공한다는 것은 인증 객체를 가지고 인증 관련 기능을 사용한다는 것 - 이 래퍼를 사용함으로써 SecurityContext 에 쉽게 접근할 수 있고 Servlet 3.0의 비동기 처리와 같은 기능을 사용하는 동안 보안 컨텍스트를 올바르게 관리 가능
- HttpServletRequest의 래퍼 클래스로서 Servlet 3.0의 기능을 지원하면서 동시에 SecurityContextHolder와의 통합을 제공
구조 및 API

- authenticate() : 사용자가 인증되었는지 확인하고 인증되지 않았다면 로그인 페이지로 사용자를 보냄
- login() : AuthenticationManager를 사용하여 사용자가 인증할 수 있도록 함
- logout() : LogoutHandlers를 사용하여 사용자가 로그아웃 할 수 있도록 함
- startAsync() : startAsync()을 호출한 스레드에서 발견된 SecurityContext 를 Runnable 을 처리하는 스레드로 자동 복사
코드 구현
@GetMapping("/login")
public String login(HttpServletRequest request, MemberDto memberDto) throws ServletException, IOException {
request.login(memberDto.getUsername(),memberDto.getPassword());
System.out.println("PreAuthorize");
return "/index";
}
@GetMapping("/users")
public List<User> users(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
boolean authenticate = request.authenticate(response);
if(authenticate){
UserService.users();
}
return Collection.emptyList();
}
- HttpServletRequest의 객체는 Servlet3SecurityContextHolderAwareRequestWrapper
- request.login(아이디, 패스워드)를 하면 스프링 시큐리티에서 인증 필터를 통해 처리하는 과정들이 모두 이루어짐
728x90
'Language > Spring Security' 카테고리의 다른 글
Spring MVC 비동기 통합 - WebAsyncManagerIntergrationFilter (0) | 2024.08.03 |
---|---|
Spring MVC 통합 - @AuthenticationPrincipal (0) | 2024.08.03 |
인가 이벤트 - Authorization Events (0) | 2024.08.03 |
인증 이벤트 - AuthenticationEventPublisher 활용 (0) | 2024.08.02 |
인증 이벤트 - Authentication Events (0) | 2024.08.02 |