복붙노트

[SPRING] 봄 보안 차단 URL 역할

SPRING

봄 보안 차단 URL 역할

spring security intercept-url config에서 ROLE_USER와 같은 특정 경로에 대한 특정 역할을 정의한 경우 사용자에게 해당 권한이있는 경우에만 해당 경로에 액세스 할 수 있어야합니다. 그것은 의미가 있지만 ROLE_ANONYMOUS 역할을 설정하면 사용자가 인증 된 경우에도 액세스 할 수 없어야합니다. 예를 들어 사용자 ROLE_USER 권한이 있습니까? 하지만 그런 일은 일어나지 않습니다.

여기에 로그가있다.

Checking match of request : '/resources/js/test.js'; against '/resources/**'
Secure object: FilterInvocation: URL: /resources/js/test.js; Attributes: [ROLE_ANONYMOUS]
Previously Authenticated:   org.springframework.security.authentication.UsernamePasswordAuthenticationToken***********************************************
Voter: org.springframework.security.access.vote.RoleVoter@1712310, returned: -1

그런 다음 액세스가 거부되었습니다 exception.I를 얻는다면 그것은 잘 작동하는 것을 알고 내 HTTP 구성에. 그러나 위의 경우에, 그것은 그런 의미일까요, 아니면 제가 잘못하고있는 것입니다.

해결법

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

    1.다음과 같이 작성하는 것이 좋습니다.

    다음과 같이 작성하는 것이 좋습니다.

    <intercept-url pattern="/resources/**" access="ROLE_ANONYMOUS,ROLE_USER"/>
    

    다음 구성을 볼 수있는 익명 인증에 대한 공식 참조 설명서 장을 확인할 수 있습니다.

    <bean id="filterSecurityInterceptor"
        class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">
      <property name="authenticationManager" ref="authenticationManager"/>
      <property name="accessDecisionManager" ref="httpRequestAccessDecisionManager"/>
      <property name="securityMetadata">
        <security:filter-security-metadata-source>
          <security:intercept-url pattern='/index.jsp' access='ROLE_ANONYMOUS,ROLE_USER'/>
          <security:intercept-url pattern='/hello.htm' access='ROLE_ANONYMOUS,ROLE_USER'/>
          <security:intercept-url pattern='/logoff.jsp' access='ROLE_ANONYMOUS,ROLE_USER'/>
          <security:intercept-url pattern='/login.jsp' access='ROLE_ANONYMOUS,ROLE_USER'/>
          <security:intercept-url pattern='/**' access='ROLE_USER'/>
        </security:filter-security-metadata-source>" +
      </property>
    </bean>
    

    ROLE_ANONYMOUS와 ROLE_USER에 대한 이해가 조금 잘못되었습니다. Spring Security의 개발자 인 Luke Taylor가이 답변에 대해 자세히 설명합니다.

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

    2.내가 올바르게 기억하면 : 아니오, 액세스 권한만으로 보호 된 리소스 = "ROLE_ANONYMOUS"는 귀하의 경우 인증 된 사용자가 액세스 할 수 없어야합니다. "ROLE_USER"가있는 사용자가 액세스 할 수 있도록 명시 적으로 spring을 지정해야합니다. 사용하는 버전에 따라 어쩌면 표현 기반 액세스 제어 사용을 고려해야합니다. 이 방법을 사용하면 다음을 사용하여 모든 사람이 리소스에 액세스 할 수있게 만들 수 있습니다. IMHO가 더 단순한 : access = "permitAll ()".

    내가 올바르게 기억하면 : 아니오, 액세스 권한만으로 보호 된 리소스 = "ROLE_ANONYMOUS"는 귀하의 경우 인증 된 사용자가 액세스 할 수 없어야합니다. "ROLE_USER"가있는 사용자가 액세스 할 수 있도록 명시 적으로 spring을 지정해야합니다. 사용하는 버전에 따라 어쩌면 표현 기반 액세스 제어 사용을 고려해야합니다. 이 방법을 사용하면 다음을 사용하여 모든 사람이 리소스에 액세스 할 수있게 만들 수 있습니다. IMHO가 더 단순한 : access = "permitAll ()".

  3. from https://stackoverflow.com/questions/12035099/spring-security-intercept-url-roles by cc-by-sa and MIT license