본문 바로가기

분류 전체보기

(135)
Aop 패러다임 AOP는 흔히 '관점 지향 프로그래밍' 이라는 용어로 번역되는데, 이때 '관점(Aspect)' 이라는 용어가 현실적으로 와닿지 않기 때문에 어렵게 느껴질수 밖에 없다. 그럼 '관점'? 이 개발자에게 어떤 의미일까? 개발자들에게 관점은 '관심사' 라고 생각하면된다. '관심사'는 개발 시 필요한 고민이나 염두에 두어야 하는 일이라고 생각할 수 있는데, 코드를 작성하면서 염두에 두는 일들은 주로 다음과 같다. 파라미터가 올바르게 들어왔을까? 이 작업을 하는 사용자가 적절한 권한을 가진 사용자일까? 이 작업에서 발생할 수 있는 모든 예외는 어떻게 처리해야 하는가? AOP는 이러한 고민에 대한 문제를 조금 다른 방식으로 접근한다. AOP가 추구하는 것은 '관심사의 분리(separateconcerns)입니다. AO..
SpringSecurity(AuthenticationManager) AuthenticationProvider 목록중에서 인증 처리 요건에 맞는 AuthenticationProvider 를 찾아 인증처리를 위임한다 부모ProviderManager 를 설정하여 AuthenticationProvider를 계속 탐색 할 수 있다 AutheticationManager는 인증처리를 하는 첫번째 클래스이다. 사용자의 아이디와 패스워드를 Authentication(인증객체)에 담아서 AutheticationManager 에게 전달함으로써 AutheticationManager는 전반적으로 인증에 관해 모든 처리를 관리한다 AutheticationManager 인터페이스고 구현체가 ProviderManager이다 ProviderManager가 초기화 되면서 Provider타입의 객체들을 ..
SpringSecurity(AuthenticationFlow) 클라이언트가 로그인(폼인증)을 시도하면 UsernamePasswordAuthenticationFilter가 작동하게 된다. UsernamePasswordAuthenticationFilter이필터는 사용자의 요청을 받아서 아이디와 패스워드를 저장할수 있는 Authentication(인증객) 을 생하고 AuthenticationManager에게 인증처리를 맡긴다. 인증의 전반적인 관리하지만 실제로 인증역할을 하지 않고 AuthenticationProvider에 위임 하게된다. 이의미는 AuthenticationManager는 사용자가 입력한 아이디와 비밀번호 정보에 대해 검증을 하지 않는다는 말이다.AuthenticationManager는 내부적으로가 있는데 한개이상의 AuthenticationProvide..
SpringSecurity(SecurityContextPersistenceFilter) SecurityContext 객체의 생성, 저장, 조회 익명 사용자(Anonymous) 새로운 SecurityContext객체를 생성하여 SecurityContextHolder 에 저장 AnoymousAuthenticationFilter 에서 AnonymousAuthenticationToken 객체를 SecurityContext에 저장 인증시 새로운 SecurityContext 객체를 생성하여 SecurityHolder 에 저장 UsernamePasswordAuthenticationFilter에서 인증 성공 후 SecurityContext에 UsernamePasswordAuthentication 객체를 SecurityContext에 저장 인증이 최종 완료되면 Session에 SecurityContext ..
SpringSecurity(SecurityContextHolder,SecurityContext) SecurityContext Authentication 객체가 저장되는 보관소로 필요시 언제든지 Authentication 객체를 꺼내어 쓸 수 있도록 제공되는 클래스 Threadlocal에 저장되어 아무곳에서나 참조가 가능하도록 설계함 인증이 완료되면 HttpSession에 저장되어 어플리케이션 전반에 걸쳐 전역적인 참조가 가능하다 Threadlocal : 스레드마다 고유하게 할당되는 저장소가 있는데 스레드와 스레드가 공유되지 않고 각 할당된 저장소에게만 공유가 된다. SecurityContextHolder SecurityContext 객체 저장 방식 Mode_THREADLOCAL: 스레드당 SecurityContext 객체를 할당, 기본값 Mode_INHERITABLETHREADLOCAL: 메인 스레..
SpringSecurity(Authentication) 그전시간에 계속 해서 Authentication(인증)에 대해서 언급을 했다 그러면 도대체!! Authentication(인증)이 뭐냐!! 이제 알아보자 ! Authtication은 말그대로 너가 누구냐! 당신은 누구냐!를 증명하는것이다 사용자의 인증 정보를 저장하는 토큰개념 인증시 id와password를 담고 인증 검증을 위해 전달되어사용된다 인증 후 최종 인증 결과(user 객체 권한정보) 를 담고 SecurityContext에 저장되어 전역적으로 참조가 가능하다 Authentication authentication = SecurityContextHolder.getContext().getAuthentication() // 인터페이스 구조(속성) principal : 사용자 아이디 혹은 User 객체를..
SpringSecurity(필터초기화 다중보안설정) 설정 클래스 별로 보안 기능이 각각 작동( SecurityConfigu1과 SecurityConfigu2가 따로 실행되도록 지원하게 된다) 설정 클래스 별로 RequestMatcher 설정 http.antMatcher("/admin/**") (admin으로 접근할때는 첫번째 설정클래스의 보안클래스가 실행된다 / 다른 url로 요청시 두번째 설정 클래스가 실행된다.) 설정클래스 별로 필터가 생성 ( 초기화 할때 각각의 필터가 초기화 된다) 초기회 되면서 생성되었던 필터가 SecurityFilterChain 이라는 클래스 안에 속하게된다 antMatcher("/admin/**") 설정했던 url 정보를 RequestMacher 타입의 변수로 담긴 클래스의 객체가 생성된다(SecurityFilterChain)..
SpringSecurity(위임필터 초기화) DelegatingFilterProxy이클래스는 서블릿Fiter이다 스프링에서 관리하는 필터가 아니다 그래서 DelegatingFilterProxy 사용자에게 전달받은 데이터를 스프링이 관리하는 빈에 전달해주는 역할을 한다 이후에 스프링 시큐리티는 필터기반으로 요청에 대한 보안처리를 하게된다. 1. 서블릿 필터는 스프링에서 정의된 빈을 주입해서 사용할수 없음 2. 특정한 이름을 가진 스프링 빈을 찾아 그 빈에게 요청을 위임 SpringSecurityFIlterChain 이름으로 생성된 빈을 ApplicaitonContext 에서 찾아 요청을 위임 실제 보안처리를 하지 않는다 1.springSecurityFilterChain 의 이름으로 생성되는 되는데 실제로 스프링 시큐리티가 초기화 될때 생성된다. 2...