본문 바로가기

Language/Spring Security

(59)
인증 이벤트 - 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..
인가 설정 응용 - RequestMatcherDelegatingAuthorizationManager RequestMatcherDelegatingAuthorizationManager의 mappings 속성에 직접 RequestMatcherEntry 객체를 생성하고 추가RequestMatcherEntry 클래스의 메서드getEntry() : 요청 패턴에 매핑된 AuthorizationManager 객체를 반환getRequestMatcher() : 요청 패턴을 저장한 RequestMatcher 객체를 반환적용RequestMatcherDelegatingAuthorizationManager를 감싸는 CustomRequestMatcherDelegatingAuthorizationManager를 구현  적용 후 구조가장 바깥쪽에는 access() API 사용 시 기본으로 생성되기 때문에 위와 같은 구조를 가짐위와 같..
요청 기반 Custom AuthorizationManager 구현 스프링 시큐리티 인가 설정 시 선언적 방식이 아닌 프로그래밍 방식으로 구현할 수 있으며 access(AuthorizationManager) API 를 사용access()에는 AuthorizationManager 타입의 객체를 전달할 수 있으며 사용자의 요청에 대한 권한 검사를 access()에 지정한 AuthorizationManager가 처리access() 에 지정한 AuthorizationManager 객체는 RequestMatcherDelegatingAuthorizationManager의 매핑 속성에 저장적용특정한 엔드포인트에 대한 권한 검사를 수행하기 위해 AuthorizationManager를 구현하여 설정"/user", "/myPage", "/admin" 요청 패턴의 권한 검사는 Authori..