복붙노트

[SPRING] Spring Security를 ​​사용하여 특정 URL 패턴의 보안을 구분하기 위해 HTTP 메소드 (예 : GET, PUT, POST)를 사용하려면 어떻게해야합니까?

SPRING

Spring Security를 ​​사용하여 특정 URL 패턴의 보안을 구분하기 위해 HTTP 메소드 (예 : GET, PUT, POST)를 사용하려면 어떻게해야합니까?

스프링시 보안 참조는 다음과 같이 설명한다.

URL 패턴에 접근하는 데 사용되는 HTTP 메소드에 따라 특정 URL 패턴에 대한 액세스가 다르게 보안되도록 Spring Security를 ​​어떻게 구성 할 수 있습니까?

해결법

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

    1.이것은 단지 구성에 관한 것입니다. 요소는 구성 파일의 태그에서 위에서 아래로 평가됩니다.

    이것은 단지 구성에 관한 것입니다. 요소는 구성 파일의 태그에서 위에서 아래로 평가됩니다.

    <http auto-config="true">
        <intercept-url pattern="/**" access="isAuthenticated" />
        <intercept-url pattern="/login.jsp" access="permitAll" />
    </http>
    

    위의 예에서 인증 된 사용자 만 로그인 페이지 (사용자가 먼저 로그인해야합니다.)를 제외한 모든 항목에 액세스 할 수 있습니다. 그러나 문서에 따르면, 이는 덜 구체적인 일치가 위에 있기 때문에 작동하지 않습니다. 따라서이 예제의 목표를 달성하기위한 올바른 구성 중 하나는 다음과 같습니다.

    <http auto-config="true">
        <intercept-url pattern="/login.jsp" access="permitAll" />
        <intercept-url pattern="/**" access="isAuthenticated" />
    </http>
    

    더 구체적인 경기를 맨 위에 놓습니다.

    따옴표가 말한 마지막 것은 HTTP 메소드에 관한 것입니다. 일치 항목을 지정하는 데 사용할 수 있으므로 다음을 수행 할 수 있습니다.

    <http auto-config="true">
        <intercept-url pattern="/client/edit" access="isAuthenticated" method="GET" />
        <intercept-url pattern="/client/edit" access="hasRole('EDITOR')" method="POST" />
    </http>
    

    이 두 번째 예제에서 GET을 통해 / client / edit에 액세스하려면 사용자는 인증 만 받으면되지만 POST를 통해 / client / edit에 액세스하려면 (EDITOR 역할을 가져야 함). 그 URL 패턴은 일부 장소에서 권장되지 않을 수도 있지만 단지 예일뿐입니다.

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

    2.Java 어노테이션 기반 구성을 선호하는 경우이 클래스를 응용 프로그램에 드롭하십시오.

    Java 어노테이션 기반 구성을 선호하는 경우이 클래스를 응용 프로그램에 드롭하십시오.

    @Configuration
    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests().antMatchers(HttpMethod.GET).permitAll();
            http.authorizeRequests().antMatchers(HttpMethod.POST).denyAll();
            http.authorizeRequests().antMatchers(HttpMethod.DELETE,"/you/can/alsoSpecifyAPath").denyAll();
            http.authorizeRequests().antMatchers(HttpMethod.PATCH,"/path/is/Case/Insensitive").denyAll();
            http.authorizeRequests().antMatchers(HttpMethod.PUT,"/and/can/haveWildcards/*").denyAll();
    
        }
    
    }
    

    다음 Maven 종속성을 사용하십시오 (이전 버전의 Spring-Security도 작동해야 함).

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>5.0.0.M3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>5.0.0.M3</version>
        </dependency>
    
  3. from https://stackoverflow.com/questions/7347183/using-spring-security-how-can-i-use-http-methods-e-g-get-put-post-to-disti by cc-by-sa and MIT license