스프링 보안 – 보안 없음, 필터 없음, 액세스 허용

1. 개요

Spring Security는 요청 패턴을 보안되지 않거나 모든 액세스를 허용하도록 구성하는 여러 메커니즘을 제공합니다. 이러한 각 메커니즘에 따라 이는 해당 경로에서 보안 필터 체인을 전혀 실행하지 않거나 필터 체인을 실행하고 액세스를 허용 함을 의미 할 수 있습니다.

2. access =”permitAll”

설정 access =”permitAll” 이있는 요소 는 특정 경로에서 모든 요청이 허용 되도록 인증을 구성합니다 .

또는 Java 구성을 통해 :

http.authorizeRequests().antMatchers("/login*").permitAll();

이것은 보안 필터를 비활성화하지 않고 달성 됩니다.필터는 계속 실행되므로 Spring Security 관련 기능을 계속 사용할 수 있습니다.

3. 필터 =”없음”

이것은 Spring 3.1에서 더 이상 사용되지 않고 대체 된 Spring 3.1 이전 기능입니다 .

필터는 봄 보안 필터는 특정 요청 경로에 전적으로 체인 비활성화 속성 :

이것은 요청 처리에 Spring Security의 일부 기능이 필요할 때 문제를 일으킬 수 있습니다.

3.0보다 새로운 Spring 버전은 더 이상 사용되지 않는 기능이므로 Spring 3.1과 함께 사용하면 시작시 런타임 예외가 발생합니다.

SEVERE: Context initialization failed org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: The use of "filters='none'" is no longer supported. Please define a separate  element for the pattern you want to exclude and use the attribute "security='none'". Offending resource: class path resource [webSecurityConfig.xml] at o.s.b.f.p.FailFastProblemReporter.error(FailFastProblemReporter.java:68)

4. 보안 =”없음”

위의 오류 메시지에서 보았 듯이 Spring 3.1은 filters =”none” 을 새로운 표현식 인 security =”none”으로 대체 합니다 .

범위도 변경되었습니다. 이것은 더 이상 요소 수준. 대신 Spring 3.1은 여러정의 할 요소 – 각각 고유 한 보안 필터 체인 구성이 있습니다. 따라서 새 보안 속성은 이제 요소 수준.

실제로 이것은 다음과 같습니다.

또는 Java 구성 :

web.ignoring().antMatchers("/resources/**");

이전 대신 :

filters =”none” 과 유사하게 이는 해당 요청 경로에 대한 보안 필터 체인을 완전히 비활성화합니다. 따라서 요청이 애플리케이션에서 처리 될 때 Spring Security 기능을 사용할 수 없습니다.

이는 실제 처리가 수행되지 않는 정적 리소스 제공 을 주로 다루는 위의 예에서는 문제가되지 않습니다 . 그러나 요청이 어떤 방식 으로든 프로그래밍 방식으로 처리되는 경우 require-channel , 현재 사용자 액세스 또는 보안 메서드 호출 과 같은 보안 기능을 사용할 수 없습니다.

같은 이유로, 추가 속성을 지정하는 것은 의미가 없습니다. 해당 요청 경로가 보안되지 않고 속성이 무시되기 때문에 이미 security =”none” 으로 구성된 요소입니다 .

또는 access = 'IS_AUTHENTICATED_ANONYMOUSLY' 를 사용하여 익명 액세스를 허용 할 수 있습니다.

5. 보안에 대한주의 사항 =”없음”

다중 사용시 일부는 security =”none”으로 구성된 요소는 이러한 요소가 정의되는 순서가 중요합니다. 우리는 특정 첫 번째 경로는 맨 끝에 보편적 인 패턴을 따랐습니다.

또한 요소 가 패턴을 지정하지 않은 경우 기본적으로 범용 일치 패턴 인 "/ **"에 매핑되므로이 요소는 마지막 요소 여야합니다. 요소의 순서가 올바르지 않으면 보안 필터 체인 생성이 실패합니다 .

Caused by: java.lang.IllegalArgumentException: A universal match pattern ('/**') is defined before other patterns in the filter chain, causing them to be ignored. Please check the ordering in your  namespace or FilterChainProxy bean configuration at o.s.s.c.h.DefaultFilterChainValidator.checkPathOrder(DefaultFilterChainValidator.java:49) at o.s.s.c.h.DefaultFilterChainValidator.validate(DefaultFilterChainValidator.java:39)

6. 결론

이 기사에서는 필터 =”none”, security =”none”및 access =”permitAll” 간의 차이점을 중심으로 Spring Security로 경로에 대한 액세스를 허용하는 옵션에 대해 설명합니다 .

평소처럼 예제는 GitHub에서 사용할 수 있습니다.