복붙노트

[SPRING] Spring Security에서 어떤 종류의 소유권을 기반으로 사용자 역할 설정하기

SPRING

Spring Security에서 어떤 종류의 소유권을 기반으로 사용자 역할 설정하기

스프링 기반 애플리케이션에서는 현재 ADMIN 및 USER와 같은 기본적인 역할을 담당합니다.

USER로부터 상속받은 PHOTO_UPLOADER와 같은 사용자 역할을 정의 할 수 있습니까? 실제로 전화를 걸는 사용자가 실제로 사진의 소유자인지 여부도 확인합니다.

나는 나의 컨트롤러 액션에서 (currentUser.id == photo.uploader.id) 같은 것을 계속 쓰는 것에 질려 버렸다. 다른 엔티티에도 적용됩니다.

해결법

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

    1.Tomasz Nurkiewicz와 같은 ACL을 사용하여이를 처리 할 수 ​​있습니다. 그러나 봄 Securitz ACL은 복잡하고 문서화가 잘되어 있지 않습니다. (Spring Security 3 - Spring Security의 저자에 의해 내가 아는 가장 좋은 자료는이 책이다.)

    Tomasz Nurkiewicz와 같은 ACL을 사용하여이를 처리 할 수 ​​있습니다. 그러나 봄 Securitz ACL은 복잡하고 문서화가 잘되어 있지 않습니다. (Spring Security 3 - Spring Security의 저자에 의해 내가 아는 가장 좋은 자료는이 책이다.)

    하지만이 간단한 if (currentUser.id == photo.uploader.id) 테스트 만 필요한 경우 다른 기술을 사용하는 것이 좋습니다.

    @PreAuthorize 주석에서 사용할 수있는 메소드 보안 표현식을 향상시킬 수 있습니다. 처럼:

    @PreAuthorize("isPhotoOwner(#photo)")
    public void doSomething(final Photo photo) {
    

    이러한 표현식을 구현하려면 isPhotoOwner 핵심은 정말 간단합니다 :

    public class ExtendedMethodSecurityExpressionRoot extends MethodSecurityExpressionRoot {
    
        public ExtendedMethodSecurityExpressionRoot(final Authentication a) {
            super(a);
        }
    
        /**
         * 
         */
        public boolean isPhotoOwner(final Photo photoObject) {
            if (photoObject == null) {
                return false;
            }
    
            Photo photo = (photo) photoObject;
            return photo.getCreator().getLogin().equals(authentication.getName());
        }
    }
    

    Unfortunaly에는 ExtendedMethodSecurityExpressionRoot를 등록하기위한 몇 가지 추가 작업이 있습니다. --- 나는 그 순간에 시간이 없어요. 만약 당신이이 접근법을 기꺼이 시도하고, 의회를 떠나면 나머지를 서술 할 것입니다.

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

    2.나는 당신이 사용하고있는 어떤 종류의 데이터 접근 기술을 알지 못합니다. 나는 당신이 인터셉터 나 이벤트 리스너를 작성하여 최대 절전 모드에 대한 보안 검사를 할 수 있다는 것을 알고있다. 나는 ibatis도 같은 방식이라고 생각한다. 내 프로젝트에서는 CRUD가 상위 모델 / 엔티티 클래스에서 인터페이스 메소드를 사용 가능하도록 설정하고 엔티티로드 전과 같은 일부 이벤트에서 보안 점검을 수행했습니다. 봄 보안 acl은 약간 복잡합니다. 보안 솔루션을 구현하는 것이 더 좋습니다.

    나는 당신이 사용하고있는 어떤 종류의 데이터 접근 기술을 알지 못합니다. 나는 당신이 인터셉터 나 이벤트 리스너를 작성하여 최대 절전 모드에 대한 보안 검사를 할 수 있다는 것을 알고있다. 나는 ibatis도 같은 방식이라고 생각한다. 내 프로젝트에서는 CRUD가 상위 모델 / 엔티티 클래스에서 인터페이스 메소드를 사용 가능하도록 설정하고 엔티티로드 전과 같은 일부 이벤트에서 보안 점검을 수행했습니다. 봄 보안 acl은 약간 복잡합니다. 보안 솔루션을 구현하는 것이 더 좋습니다.

  3. ==============================

    3.액세스 제어 목록 인 ACL의 세계에 오신 것을 환영합니다. 이 튜토리얼은 오래되었지만 꽤 포괄적입니다.

    액세스 제어 목록 인 ACL의 세계에 오신 것을 환영합니다. 이 튜토리얼은 오래되었지만 꽤 포괄적입니다.

  4. from https://stackoverflow.com/questions/9495746/setting-user-roles-based-on-some-kind-of-ownership-in-spring-security by cc-by-sa and MIT license