복붙노트

[SPRING] Grails : 특정 경로에서 Spring Security Core 비활성화

SPRING

Grails : 특정 경로에서 Spring Security Core 비활성화

특정 패턴 (예 : / api / **)에 대한 호출이 걸러지지 않는 방식으로 Spring Security Core를 설정하려면 어떻게해야합니까?

grails.plugins.springsecurity.filterChain.chainMap = [
'/api/**': '',
'/**': 'JOINED_FILTERS',
]

콩을 해결하려고하기 때문에 작동하지 않습니다.

'JOINED_FILTERS, -filter1, -filter2, ...'와 같은 불쾌한 해결 방법 외에 다른 것이 있습니까?

정적 리소스는 스프링 보안에서 어떻게 제외됩니까?

해결법

  1. ==============================

    1.필터 체인에 익명 필터를 추가해야합니다. grails spring security rest 설정 튜토리얼을 따랐다면 다음 코드를 얻었을 것입니다 :

    필터 체인에 익명 필터를 추가해야합니다. grails spring security rest 설정 튜토리얼을 따랐다면 다음 코드를 얻었을 것입니다 :

    grails.plugin.springsecurity.filterChain.chainMap = [
        //Stateless chain
        [
            pattern: '/**',
            filters: 'JOINED_FILTERS,-anonymousAuthenticationFilter,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter,-rememberMeAuthenticationFilter'
        ]
    ]
    

    필터 체인에서이 필터를 제거하는 "-anonymousAuthenticationFilter"가 있음에 유의하십시오. 코드에서이 부분 (-anonymousAuthenticationFilter)을 제거하면이 필터가 필터 체인으로 돌아가며, @Secured ( "permitAll") 또는 @Secured ([ 'IS_AUTHENTICATED_ANONYMOUSLY'])를 다시 사용할 수 있습니다.

    마지막 필터 체인 맵은 다음과 같았고 매력처럼 작동했습니다.

    grails.plugin.springsecurity.filterChain.chainMap = [
        //Stateless chain
        [
            pattern: '/**',
            filters: 'JOINED_FILTERS,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter,-rememberMeAuthenticationFilter'
        ]
    ]
    

    개발 환경의 logback.groovy를 추가하여 인증 프로세스에 대한 자세한 내용을 확인해야합니다.

    logger("org.springframework.security", DEBUG, ['STDOUT'], false)
    logger("grails.plugin.springsecurity", DEBUG, ['STDOUT'], false)
    logger("org.pac4j", DEBUG, ['STDOUT'], false)
    
    logger("StackTrace", ERROR, ['FULL_STACKTRACE'], false)
    root(ERROR, ['STDOUT', 'FULL_STACKTRACE'])
    

    봄 보안 휴식을 사용하지 않는다면 같은 생각이 적용됩니다.

  2. ==============================

    2.간단한 비인가 필터를 구현할 수 있습니다 ::

    간단한 비인가 필터를 구현할 수 있습니다 ::

    class NonAuthenticationFilter  extends GenericFilterBean {
    
        void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            chain.doFilter(request, response);
        }
    }
    

    resources.groovy에서 정의하십시오.

    beans = {
        nonAuthFilter(NonAuthenticationFilter)
    }
    

    그리고 귀하의 URL 패턴을 구성 :

    grails.plugins.springsecurity.filterChain.chainMap = [
        '/api/**': 'nonAuthFilter',
        '/**': 'JOINED_FILTERS',
    ]
    grails.plugins.springsecurity.interceptUrlMap = [
        '/api/**': ['IS_AUTHENTICATED_ANONYMOUSLY']
    ]
    
  3. ==============================

    3.

    grails.plugin.springsecurity.interceptUrlMap = [
        '/api/**': ['IS_AUTHENTICATED_ANONYMOUSLY']
    ]
    

    이것으로는 부족합니다.이 줄을 추가해야합니다 :

    grails.plugin.springsecurity.securityConfigType = "InterceptUrlMap"
    
       grails.plugins.springsecurity.*
    
      grails.plugin.springsecurity.*//plugin without s
    
  4. from https://stackoverflow.com/questions/18079122/grails-disable-spring-security-core-on-certain-paths by cc-by-sa and MIT license