인가처리-method방식 v3

Shaun·2022년 3월 2일
1

Spring Security

목록 보기
17/19
post-thumbnail

MapBasedMethodSecurityMetadataSource

  • 기본적 구현이 완성 되있고 DB로부터 자원과 권한정보를 매핑한 데이터를 전달하면 알아서 메서드 방식의 인가처리가 이루어지는 클래스

  • Url 인가처리 방식과 매우 흡사하지만 다른점은 이것은 AOP방식이라는 점

  • interceptor(Advice인가처리) 에서 권한요청을 MapBased에 요청하고 DB에서 메서드방식 권한정보를 가져온다. ->AccessDecisionManager에게 권한정보를 넘긴다.

how to make?

  • 이전까지 기본 flow를 알아봤다. 이제 이 클래스에 대해 좀더 자세히 알아보자

  • 우리가 필요한 객체를 customMethodSecurityMetadataSource()를 오버라이드 해서 만들면 GlobalMethodSecurityConfiguration이 우리가 만든 객체를 저장해서 우리가 맵기반인가처리를 할수잇도록 도와준다

GlobalMethodSecurityConfiguration 초기화

  • 코드를 파헤쳐 보자.

  • 이것은 위에처럼 bean 들을 생성하는데 customMethodSecurityMetadataSource 이 null이 아니면 특정 List에 담는다.

  • customMethodSecurityMetadataSource는 DelegationMethodMetadataSource라는 것을 빈으로 생성하는데 이 안에는 앞서 말한 List가 들어있다.

  • 이 의미는 보안처리를 이렇게 하겠다는 뜻

  • 네가지 방식이 하나도 활성화되잇지 않거나 객체로 추가되지 않으면 IllegalStateException 발생

  • 초기화시 customMethodSecurityMetadataSource() 호출

  • 우리가 만든 customMethodSecruty — 에서. MapBasedMethodSecurityMetadataSource 생성해서 리스트에 넣어줌( 이방식으로 보안처릴리를 하겠다는뜻)

Flow

  • 우리가 해야할 일은 DB에서 권한정보를 가져와 MapBased에 파싱 시켜주는 부분이고 이후에는 Advisor이 pointcut을 통해 모든 빈을 검사

  • 우리가 저장한 정보들에 맞는 빈을 찾아 프록시로 생성. 그리고 그메서드를 어드바이저로 등록

  • Map 전달만 해주면 스프링 시큐리티가 파싱하고 프록시생성하고 어드바이저 까지 만들어준다

==> 이방법은 보안 애노테이션도 필요없다/ DB에 권한설정만 잘해주고 포함형태 잘해주고 그걸 map으로 담아 MapBase에 전달해주면 스프링 시큐리티가 알아서 나머지는 처리한다.

실습

  • custom 메서드를 오버라이드 해준다. GlobalMethod 메서드는 초기화시 이메서드를 실행 시킨다.

  • URL방식과 매우 흡사하다.

  • DB에서 권한정보를 가져와 map 형태로 묶어주기

  • MapBased 클래스 생성자에 우리가만든 DB에서 권한정보를 가져와 map으로 묶은 데이터들을 보내준다.

  • 그러면 스프링 시큐리티가 알아서 key-value형태로 파싱하고 모든 빈을 검사해 우리가 보낸 map정보와 비교를 시작한다. 그래서 그 데이터를 기반으로 보안에 해당되는 메서드들에대해 프록시를 만들고 Advice를 만든다.

profile
호주쉐프에서 개발자까지..

0개의 댓글