스프링시큐리티를 사용해서 특정URI에 접근을 차단하는 부분 질문드립니다.

2018-01-08 00:37

안녕하세요. 스프링시큐리티를 사용해서 특정URI에 접근을 차단하는 부분을 구현 중에 헷갈리는 부분이있어 질문드립니다.

우선 프로젝트에서 커스텀한 FilterSecurityInterceptor를 사용하고 있습니다.

만약 이럴경우 SecurityConfig 파일에서 아래와 같이 URI 제한을 걸더라도 테스트를해보니

    http
            .csrf().disable()
            .authorizeRequests()
            .antMatchers("/admin/**").hasRole("ADMIN")

무시되고(=ADMIN권한이 없더라도 통과) FilterChain상 마지막에 있는 FilterSecurityInterceptor에 설정된 AccessDecisionManager에 의해서 통과 시킬지 말지가 결정되고 있었습니다.

[질문]

Q> 그럼 이럴경우에는 SecurityConfig에서 URI 제한은 무용지물이 되고있는데 굳이 설정안해줘도 되는건가요? 아니면 혹시 모르니 그래도 제한을 걸어주는것이 맞는 걸까요?

Q> 굳이 SecurityConfig에서 URI제한을 안하더라도 찾아보니 @Secured 또는 @PreAuthorize어노테이션을 컨트롤러 메소드에 붙여 해당 URI 제한을 걸수가 있던데, SecurityConfig에서 제한을 거는경우와 어노테이션을 이용해서 제한을 거는 경우의 특별한 차이점이 있을까요?

만약 차이점이 없다면 기능 추가시(=URI추가시) SecurityConfig에서 URI 제한을 일일히 다 설정해주는것보다 어노테이션 방식으로 해당 메소드위에 어노테이션을 붙여주는게 훨씬 효율적일것 같아 질문드립니다.

또한 프로젝트에서는 URI별로 접근을 할지 말지를 AccessDecisionManager에서 해주고있는데, 일단 모두 통과시켜주고 메소드위에 어노티이션(@Secured)을 붙여서 URI별로 접근 제한거는 것이 더 좋은 방법이지 않을까란 생각이 드는데 조언 부탁드리겠습니다.

-> 즉 복잡하게 스프링 시큐리티쪽에서(SecurityConfig 또는 FilterInvocationSecurityMetadataSource) URI제한을 걸지말고 만능약인 @Secured 또는 @PreAuthorize를 컨트롤러 메소드위에 붙여 URI제한을 하는게 미래에 기능이 추가되더라도 다른곳에 수정없이 간단히 어노테이션만 붙이면 되므로 심플하지 않을까란 생각이 들어서 질문드립니다.

그럼 오늘 하루도 좋은 하루되세요~ 감사합니다.

0개의 의견 from SLiPP

의견 추가하기

연관태그

← 목록으로