분류 전체보기 1341

ch02. AOP Method 기반 DB 연동 - 주요 아키텍처 이해

인가 처리를 위한 초기화 과정과 진행 초기화 과정 초기화 시 전체 빈을 검사하면서 보안이 설정된 메소드가 있는지 탐색 빈의 프록시 객체를 생성( Spring이 자동 생성) 보안 메서드에인가처리(권한 심사) 기능을 하는 Advice를등록 빈 참조시 실제 빈이 아닌 프록시 빈 객체를 참조 Key: 메서드, value: 권한을 등록한다 진행과정 메소드 호출 시 프록시 객체를 통해 메소드를 호출 Advice가 등록되어 있다면 Advice를 작동하게 하여 인가 처리 권한 심사 통과하면 실제 빈의 메서드를 인가 처리를 위한 초기화 과정 DefaultAdvisorAutoProxyCreator가 메소드를 찾아 그 빈의 Proxy 객체를 생성한다. 어떤 과정의 통해 빈을 찾는지? MethodSecurityMetadata..

ch01. Method 방식 개요

서비스 계층의 인가처리 방식 화면, 메뉴 단위가 아닌 기능 단위로 인가처리 메서드 처리 전. 후로. 보안 검사 수행하여 인가처리 AOP 기반으로 동작 프락시와 어드바이스로 메소드 인가처리 수행 URL 같은 경우 Filter기반으로 동작하는 방식이고, 메서드 같은경우 AOP기반으로 동작한다. 보안 설정 방식 어노테이션 권한 설정 방식 @PreAuthorize(“hasRole(‘USER’)”), @PostAuthorize(“hasRole(‘USER’)”), @Secured(“ROLE_USER”) Map 기반 권한 설정 방식 Map 기반 방식으로 외부와 연동하여 메소드 보안 설정 구현

ch09. 아이피 접속 제한하기 - CustomIpAddressVoter

AccessDecusionManager 가 여러 Voter를 가지고 있다. 심의 기준 특정한 IP 만 접근이 가능하도록 심의하는 Voter 추가 Voter 중에서 가장 먼저 심사하도록 하여 허용된 IP 일 경우에만 최종 승인 및 거부 결정을 하도록 한다 허용된 IP 이면 ACCESS_GRANTED 가 아닌 ACCESS_ABSTAIN을리턴해서 추가 심의를 계속 진행하도록 한다 허용된 IP 가 아니면 ACCESS_DENIED를 리턴하지 않고 즉시 예외 발생하여 최종 자원 접근 거부 IP Entity 추가 AccessIpRepository 생성 voterManager의 accessDecisionVoter를 추가한다. IPAddressVoter public class IpAddressVoter implement..

ch08. 계층 권한 적용하기- RoleHierarchy

기존에는 단순 String 권한만 있다면 권한이 있다고, 판단하였다(계층 적용 X) RoleHierarchy 상위 계층 Role은 하위 계층 Role의 자원에 접근 가능함 ROLE_ADMIN > ROLE_MANAGER > ROLE_USER 일 경우 ROLE_ADMIN 만 있으면 하위 ROLE ROLE의 권한을 모두 포함한다 RoleHierarchyVoter RoleHierarchy를생성자로 받으며 이 클래스에서 설정한 규칙이 적용되어 심사함 @Transactional public void createRoleHierarchyIfNotFound(Role childRole, Role parentRole) { RoleHierarchy roleHierarchy = roleHierarchyRepository.fin..

ch07. 인가처리 허용 필터 - PermitAllFilter 구현

PermitAllFilter를 먼저 작성하여, 실제 권한 심사가 필요 없는 요청은 AbstractSecurityInterceptor에 인가를 요청하지 않도록 구현한다. PermitAllFilter public class PermitAllFilter extends FilterSecurityInterceptor { private static final String FILTER_APPLIED = "__spring_security_filterSecurityInterceptor_filterApplied"; //RequestMatcher타입으로 List로 저장 private List permitAllRequestMatcher = new ArrayList(); //생성자를 통해 PermitAll되는 자원을 입력받는다..

ch05. 웹 기반 인가처리 DB 연동 - FilterInvocationSecurityMetadataSource (2)

UrlResourcesMapFactoryBean DB로부터 얻은 권한/자원 정보를 ResurceMap을 빈으로 생성해서 UrlFilterInvocationSecurityMetadataSource에 전달 //DB로 부터 값을 읽어와 자원과 메핑된 정보를 가지고 있어야한다. public class UrlResourcesMapFactoryBean implements FactoryBean { private SecurityResourceService securityResourceService; private LinkedHashMap resourcesMap; public void setSecurityResourceService(SecurityResourceService securityResourceService) ..

ch04. 웹 기반 인가처리 DB 연동 - FilterInvocationSecurityMetadataSource (1)

사용자가 접근하고자 하는 Url 자원에 대한 권한 정보 추출 AccessDecisionManager에게 전달하여 인가처리 수행 DB로부터 자원 및 권한 정보를 매핑하여 Map객체로 관리 사용자의 매 요청마다 요청정보에 매핑된 권한 정보 확인 사용자의 요청을 FilterSecurityInterceptor가 받는다. 권한정보를권한 정보를 추출하기 위해 우리가 작성한 FilterInvocationSecurityMetadataSource에서 권한 정보를 추출한다. DB에서 정보를 얻어 자원/권한에 매칭되도록 Map으로 저장한 뒤 권한 목록을 다시 Filter에 반환한다. Filter 추가 public class UrlFilterInvocationSecurityMetadataSource implements Fil..

ch03. 웹 기반 인가처리 DB 연동 - 주요 아키텍처 이해

스프링 시큐리티의 인가처리 http.antMatchers(“/user”).access(“hasRole(‘USER’)”) 얻을 수 있는 정보 = 인증정보, 요청 정보, 권한 정보 각각의 Key-Value로 자원에 따른 권한 정보를 저장한다. SecuirtyIntercepteor 가 파라미터로 인증정보, 요청정보, 권한정보를 전달해 준다. 3개의 정보 읽어오기 protected InterceptorStatusToken beforeInvocation(Object object) { Assert.notNull(object, "Object was null"); if (!this.getSecureObjectClass().isAssignableFrom(object.getClass())) { throw new Illeg..

ch02. 관리자 시스템 - 권한 도메인, 서비스, 리포지토리 구성

SetupDataLoader 초기 데이터를 넣어두었다. @Component public class SetupDataLoader implements ApplicationListener { private boolean alreadySetup = false; @Autowired private UserRepository userRepository; @Autowired private RoleRepository roleRepository; @Autowired private ResourcesRepository resourcesRepository; @Autowired private PasswordEncoder passwordEncoder; private static AtomicInteger count = new Ato..