스프링 시큐리티/실전프로젝트 - 인가 프로세스 DB 연동 웹 계층 구현

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

webmaster 2022. 1. 24. 12:49
728x90

DB를 통해 ResourceMap에 저장하기

  • UrlResourcesMapFactoryBean
    • DB로부터 얻은 권한/자원 정보를 ResurceMap을 빈으로 생성해서 UrlFilterInvocationSecurityMetadataSource에 전달
    • //DB로 부터 값을 읽어와 자원과 메핑된 정보를 가지고 있어야한다.
      public class UrlResourcesMapFactoryBean implements FactoryBean<LinkedHashMap<RequestMatcher, List<ConfigAttribute>>> {
      
          private SecurityResourceService securityResourceService;
          private LinkedHashMap<RequestMatcher, List<ConfigAttribute>> resourcesMap;
      
          public void setSecurityResourceService(SecurityResourceService securityResourceService) {
              this.securityResourceService = securityResourceService;
          }
      
          @Override
          public LinkedHashMap<RequestMatcher, List<ConfigAttribute>> getObject() throws Exception {
              //securityResourceService가 Map을 만들어 resourcesMap에 넣어줄 것이다
              if(resourcesMap == null){
                  //생성해 주어야한다.
                  init();
              }
              return resourcesMap;
          }
      
          private void init() {  //DB로 부터 메핑된 자원을 얻는다
              resourcesMap = securityResourceService.getResourceList();
          }
      
          @Override
          public Class<?> getObjectType() {
              return LinkedHashMap.class;
          }
      
          @Override
          public boolean isSingleton() {
              return FactoryBean.super.isSingleton();
          }
      }
    •  싱글톤 형태로 초기에 설정한 저장된 값을 가지고 있는다.
  • MetaDataSource의 생성자로 내가 만든 FactoryBean을 전달
    • 생성자로 내가 만든 FactoryBean 전달
    • MetaDataSource의 생성자
    • DB와 연동된 Repository를 주입해 준다.
728x90