본문 바로가기
관리자

Programming-[Backend]

(394)
[링크] 스프링 AOP 용어 개념 정리 AOP는 Aspect Oriented Programming의 약자이다. 관점에 따라 프로그래밍을 하겠다는 뜻이 된다. 코드에서 공통적으로 나타나는 부가적인 기능을 모듈화하여 하나의 관점(Aspect)로 바라보고 공통화한다. 주요개념 Aspect : 위에서 설명한 흩어진 관심사를 모듈화 한 것. 주로 부가기능을 모듈화함. Target : Aspect를 적용하는 곳 (클래스, 메서드 .. ) Advice : 실질적으로 어떤 일을 해야할 지에 대한 것, 실질적인 부가기능을 담은 구현체 JointPoint : Advice가 적용될 위치, 끼어들 수 있는 지점. 메서드 진입 지점, 생성자 호출 시점, 필드에서 값을 꺼내올 때 등 다양한 시점에 적용가능 PointCut : JointPoint의 상세한 스펙을 정의한..
[스프링 시큐리티]23. Method 방식 : 동작방식 및 구조 알아보기 1. 개요 페이지별 즉 화면 단위별 인가처리를 하는 것이 아니라 메소드 단위로 인가처리를 적용할 수 있는 방법이다. 예를 들어서 UserServiceImpl에 아래 처럼 order 메서드를 추가할 수 있다. 그리고 @Secured라는 어노테이션을 적용해서 해당 method에 접근할 때는 "ROLE_MANAGER" 권한이 있는지 검사하도록 할 수 있는 것이다. 어떠 방식으로 동작하는 지 그 구조와 원리에 대해서 학습해본다. @Override @Secured("ROLE_MANAGER") public void order() { System.out.println("order"); } 2. 동작 방식 서버를 실행할 때 초기화가 진행된다. 초기화 때 보안 어노테이션이 있는 빈의 프록시 객체를 만들고, 여기에 인가처..
[스프링 시큐리티]22. 아이피 접속 제한 ; AccessDecisionVoter 추가 1. Voter에 의한 인가 처리 방식 Voter에 의한 인가처리는 AccessDecisionManager에 의해 접근을 검사하는 것이고, 앞선 글의 계층 권한 처리에서 살펴본 것과 같은 방식으로 처리한다. 따라서 추가적인 Voter 구현체로 IpAddressVoter를 만들어주면 된다. 다시 말해 RoleHierarchyVoter 외에 IpAddressVoter를 추가하여 접속자의 Ip도 검사하는 방식이 된다. Voter의 결과 리턴값 public interface AccessDecisionVoter { int ACCESS_GRANTED = 1; int ACCESS_ABSTAIN = 0; int ACCESS_DENIED = -1; boolean supports(ConfigAttribute var1); ..
[스프링 시큐리티]21. 계층 권한 1. 계층 권한 적용 : RoleHierarchy, RoleHierarchyVoter 개념 User, Manager, Admin 권한이 있을 때, 보통은 Admin 권한이 있다면 User, Manager 권한을 갖도록 설계하는 것이 보통이다. 이런 권한 계층 관리를 해주는 것이 RoleHierarchy 객체이다. Rolehierarchy 객체는 String 구문으로 작성된다. 예를 들면 다음과 같다. ROLE_ADMIN > ROLE_MANAGER ROLE_ADMIN > ROLE_USER 부등호와 줄바꿈(\N) 기호를 통해서 구분하며, 하나의 String으로 작성되어야 한다. 부등호가 큰 쪽이 상위 계층이라는 의미가 된다. 이렇게 작성된 RoleHierarchy 객체를 RoleHierarchyVoter에 ..
[TIL][링크][작성중] 자바 어노테이션 및 리플렉션(Java Annotation, Reflection) 리플렉션 기초개념 어떤 클래스의 멤버 변수, 메서드 등을 호출할 수 있다. (예시 추가) class의 변수들은 그야말로 변수다. 아직 어떤 값이 지정될 지 모른다. 클래스의 변수들은 생성자를 통해 인스턴스가 생성되면서 그 값들이 정해지므로 constant 하지 못하다. 어노테이션에서 attribute로 지정하기 위해서는 constant해야만 한다. 따라서 클래스 자체를 어노테이션의 속성값으로 지정할 수는 없다. 리플렉션 사용 시 유의점 인스턴스가 이미 생성되있는 경우라면 굳이 리플렉션을 사용할 필요가 없다. 성능에 좋지 않다. 컴파일 단계에서는 확인 불가하고 런타임에서만 오류를 확인할 수 있다. .setAccessible(true) 메서드를 통해서 접근 지정자(Java Access Modifier)를 무..
[링크] JPA Map 결과 리턴(결과 집합 그루핑) JPA에서 결과를 Map형태로 추출하고 싶을때는, transform 메서드와 GroupBy.groupBy 인터페이스를 활용하면 된다. 3.2.4. 결과 집합(aggregation) com.mysema.query.group.GroupBy 클래스는 메모리에서 쿼리 결과에 대한 집합 연산을 수행하는 집합 함수를 제공한다. 다음은 사용 예이다. 부모 자식 관계에 대한 집합 연산 import static com.mysema.query.group.GroupBy.*; Map results = query.from(post, comment) .where(comment.post.id.eq(post.id)) .transform(groupBy(post.id).as(list(comment))); 이 코드는 post id와 관련..
[스프링 시큐리티]20. 실시간 권한 업데이트, 허용필터 1. 실시간 처리 실시간 처리는 관리자가 DB에 자원/권한 정보를 업데이트 할 때, 실시간으로 앞서 작성한 ResourceMap에 업데이트를 해서 사용자들이 웹 사이트를 이용하는데 문제가 없도록 하는 작업이다. reload 메서드 추가 처리를 위해서 UrlFilterInvocationMetadataSource에 reload 메서드를 추가한다. iterator를 활용하는 문법에 유의하자. public void reload() { LinkedHashMap reloadedMap = securityResourceService.getResourceList(); Iterator iterator = reloadedMap.entrySet().iterator(); requestMap.clear(); //기존 정보를 지움..
[스프링 시큐리티]19. DB 연동 인가처리 -FilterInvocationSecurityMetadataSource 구현 1. DB 연동 : requestMap 가져오기 requestMap.put(new AntPathRequestMatcher("/mypage"), Arrays.asList(new SecurityConfig("ROLE_USER"))); 이제 UrlFilterInvocationMetadataSource에 위와 같이 강제로 url과 권한을 삽입하는 것이 아니라 DB에 있는 role-resource 정보를 넣어주는 것을 실습해본다. 우선 유저가 요청한 request url에 따라 해당 url에 접근 가능한 role들을 정의하는 requestMap 객체를 가져오는 코드를 작성해본다. SecurityConfig 수정 지난 글 맨 마지막 부분에서 SecurityConfig 파일의 customFilterSecurityIn..