복붙노트

[SPRING] 스프링 보안에서 동일한 역할을하는 여러 사용자에 대한 액세스 거부

SPRING

스프링 보안에서 동일한 역할을하는 여러 사용자에 대한 액세스 거부

나는 그런 상황에 직면 해있다. 나의 애플리케이션은 여러 가지 역할 (관리자, 사회자, 사용자)을 가지고있다. 중재자와 사용자는 일부 양식을 수정할 수 있습니다. 모든 퍼미션은 괜찮습니다. 그러나 사용자 (역할 사용자)로 로그인하고 URL에서 ID를 변경하면 다른 사용자 (역할 사용자)의 양식을 가져 와서 간단히 편집 할 수 있습니다.

액세스를 거부하고 그러한 작업을 방지하는 방법은 무엇입니까?

추신. 스프링 및 스프링 보안의 버전은 3.1.2입니다.

업데이트 - 봄 보안 컨텍스트 추가

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                    http://www.springframework.org/schema/security
                    http://www.springframework.org/schema/security/spring-security-3.1.xsd">

    <http use-expressions="true" auto-config="false"
        entry-point-ref="authenticationEntryPoint" access-denied-page="/403.jsp">
        <form-login login-page="/login.html"
            authentication-failure-url="/login.html?error=true"
            login-processing-url="/j_spring_security_check"
            authentication-success-handler-ref="successHandler" />
        <logout logout-url="/logout" logout-success-url="/login.html" />
        <intercept-url pattern="/admin/**" access="hasRole('adminViewPermission')" />
        <intercept-url pattern="/moderator/**" access="hasRole('moderatorViewPermission')" />

        <intercept-url pattern="**/form-management"
            access="hasRole('formManagementPermission')" />

    </http>


    <authentication-manager alias="authenticationManager">
        <authentication-provider user-service-ref="userDetailsService" />
    </authentication-manager>

    <beans:bean id="authenticationEntryPoint"
        class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
        <beans:property name="loginFormUrl" value="/login.html" />
        <beans:property name="forceHttps" value="false" />
    </beans:bean>

    <beans:bean id="successHandler"
        class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler">
        <beans:property name="defaultTargetUrl" value="/authenticate" />
        <beans:property name="alwaysUseDefaultTargetUrl" value="true"/>
    </beans:bean>

    <beans:bean id="userDetailsService"
        class="com.jack.MyYserDetailsService">
    </beans:bean>
</beans:beans>

해결법

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

    1.보안 규칙에 대한 실제 도메인 개체를 고려해야합니다. 사용자와 역할을 가진 일반적인 SpringSecurity 설정은 다음과 같은 보안 규칙을 추가 할 수 있습니다. who (일부 역할을 가진 인증 된 사용자)는 일부 URL / 메소드 호출에 액세스 할 수 있습니다. 다음과 같이 확장 된 규칙을 사용할 수있게하려면 who (일부 역할을 가진 인증 된 사용자)가 일부 URL / 메소드 호출에 액세스 할 수 있고 어떤 도메인 객체를 사용할 수 있는지 ACL 기능을 사용해야합니다.

    보안 규칙에 대한 실제 도메인 개체를 고려해야합니다. 사용자와 역할을 가진 일반적인 SpringSecurity 설정은 다음과 같은 보안 규칙을 추가 할 수 있습니다. who (일부 역할을 가진 인증 된 사용자)는 일부 URL / 메소드 호출에 액세스 할 수 있습니다. 다음과 같이 확장 된 규칙을 사용할 수있게하려면 who (일부 역할을 가진 인증 된 사용자)가 일부 URL / 메소드 호출에 액세스 할 수 있고 어떤 도메인 객체를 사용할 수 있는지 ACL 기능을 사용해야합니다.

    편집하다. 그러나 이와 같이 하나의 보안 규칙 만 있으면 ACL 설정이 과도 할 수 있습니다. 사용자 정의 웹 보안 표현식을 사용하여 실제 SpringSecurity 설정을 향상시킬 수 있습니다.

    <intercept-url pattern="/moderator/**" access="hasRole('moderatorViewPermission') and userIsAuthor()" />
    

    userIsAuthor () 메소드의 위치 :

  2. from https://stackoverflow.com/questions/14275687/denying-access-for-multiple-users-of-same-role-in-spring-security by cc-by-sa and MIT license