본문 바로가기

Language

(101)
Servlet API 통합 - SecurityContextHoladerAwareRequestFilter 스프링 시큐리티는 다양한 프레임워크 및 API 와의 통합을 제공하고 있으며 Servlet 3과 Spring MVC 와 통합을 통해 여러 편리한 기능들을 사용 가능인증 관련 기능들을 필터가 아닌 서블릿 영역에서 처리 가능Servlet3+ 통합SecurityContextHolderAwareRequestFilterHTTP 요청이 처리될 때 HttpServletRequest에 보안 관련 메소드를 추가적으로 제공하는 래퍼(SecurityContextHolderAwareRequestWrapper) 클래스를 적용이를 통해 개발자는 서블릿 API 의 보안 메소드를 사용하여 인증, 로그인, 로그아웃 등의 작업을 수행 가능HttpServlet3RequestFactoryServlet 3 API 와의 통합을 제공하기 위한 S..
인가 이벤트 - Authorization Events Spring Security는 권한 부여 이벤트 처리를 지원하며 권한이 부여되거나 거부된 경우에 발생하는 이벤트를 수신 가능이벤트를 수신하려면 ApplicationEventPublisher 를 사용하거나 시큐리티에서 제공하는 AuthorizationEventPublisher를 사용해서 발행해야 함AuthorizationEventPublisher의 구현체로 SpringAuthorizationEventPublisher가 제공 이벤트 발행 방법ApplicationEventPublisher.publishEvent(ApplicationEvent)AuthorizationEventPublisher.publishAuthorizationEvent(Supplier, T, AuthorizationDecision) 이벤트 수..
인증 이벤트 - AuthenticationEventPublisher 활용 커스텀 예외 & 이벤트 추가@Beanpublic AuthenticationEventPublisher customAuthenticationEventPublisher(ApplicationEventPublisher applicationEventPublisher) { Map, Class> mapping = Collections.singletonMap(CustomException.class, CustomAuthenticationFailureEvent.class); DefaultAuthenticationEventPublisher authenticationEventPublisher = new DefaultAuthenticationEventPublisher(applicationEventPublisher); authe..
인증 이벤트 - Authentication Events 스프링 시큐리티는 인증 성공 또는 실패 여부에 따라 AuthenticationSuccessEvent 또는 AuthenticationFailureEvent를 발생이벤트를 수신하려면 ApplicationEventPublisher를 사용하거나 시큐리티에서 제공하는 AuthenticationEventPublisher 를 사용해서 발행해야 함AuthenticationEventPublisher의 구현체로 DefaultAuthenticationEventPublisher 제공이벤트 발행 방법ApplicationEventPublisher.publishEvent(ApplicationEvent)AuthenticationEventPublisher.publishAuthenticationSuccess(Authentication)..
AOP 메서드 보안 구현 - MethodInterceptor, Pointcut, Advisor MethodInterceptor, Pointcut, Advisor, AuthorizationManager 등을 커스텀하게 생성하여 AOP 메서드 보안을 구현 가능AOP 요소 이해AdvisorAOP Advice와 Advice 적용 가능성을 결정하는 포인트컷을 가진 기본 인터페이스MethodInterceptor(Advice)대상 객체를 호출하기 전과 후에 추가 작업을 수행하기 위한 인터페이스로서 수행 이후 **실제 대상 객체의 조인포인트 호출(메서드 호출)**을 위해 Joinpoint.proceed()를 호출PointcutAOP 에서 Advice 가 적용될 메소드나 클래스를 정의하는 것으로서 어드바이스가 실행되어야 하는 '적용 지점'이나 '조건' 지정ClassFilter 와 MethodMatcher를 사용해..
포인트 컷 메서드 보안 구현 - AspectJExpressionPointcut / ComposablePointcout 메서드 보안은 AOP 를 기반으로 구축되었기 때문에 어노테이션이 아닌 패턴 형태로 권한 규칙을 선언 가능 → 요청 수준의 인가와 유사한 방식자체 어드바이저(Advisor)를 발행하거나 포인트컷(PointCut)을 사용하여 AOP 표현식을 애플리케이션의 인가 규칙에 맞게 매칭할 수 있으며 이를 통해 어노테이션을 사용하지 않고도 메소드 수준에서 보안 정책을 구현 가능AspectJExpressionPointcut을 사용하기 위해서는 spring-boot-start-aop 의존성 추가 필요빈 정의하기 - 단일 포인터컷 *execution(io.security.MyService.user(..))execution = 실행* = 반환값 ( * = 반환타입 관계없음)io.security.MyService.user = ..
메서드 기반 Custom AuthorizationManager 구현 사용자 정의 AuthorizationManager 를 생성함으로 메서드 보안을 구현 가능설정 클래스 정의@EnableMethodSecurity(prePostEnabled = false) // 시큐리티가 제공하는 클래스들을 비활성화 한다. 그렇지 않으면 중복해서 검사하게 된다@Configurationpublic class MethodSecurityConfig { @Bean @Role(BeanDefinition.ROLE_INFRASTRUCTURE) public Advisor preAuthorize() { return AuthorizationManagerBeforeMethodInterceptor.preAuthorize(new MyPreAuthorizationManager()); } @Bean @Role(Be..
메서드 기반 인가 관리자 - PreAuthorizeAuthorizationManager 외 클래스 구조 이해 스프링 시큐리티는 메서드 기반의 인증된 사용자 및 특정 권한을 가진 사용자의 자원 접근 허용 여부를 결정하는 인가 관리자 클래스들을 제공PreAuthorizeAuthorizationManager, PostAuthorizeAuthorizationManager, Jsr250AuthorizationManager, SecuredAuthorizationManager메서드 기반 권한 부여는 내부적으로 AOP 방식에 의해 초기화 설정이 이루어지며 메서드의 호출을 MethodInterceptor가 가로 채어 처리메서드 인가 처리@PreAuthorize("hasAuthority('ROLE_USER')")public List users() { System.out.println("users: " + UserRepositir..