[SPRING] Spring Security에서 어떤 종류의 소유권을 기반으로 사용자 역할 설정하기
SPRINGSpring Security에서 어떤 종류의 소유권을 기반으로 사용자 역할 설정하기
스프링 기반 애플리케이션에서는 현재 ADMIN 및 USER와 같은 기본적인 역할을 담당합니다.
USER로부터 상속받은 PHOTO_UPLOADER와 같은 사용자 역할을 정의 할 수 있습니까? 실제로 전화를 걸는 사용자가 실제로 사진의 소유자인지 여부도 확인합니다.
나는 나의 컨트롤러 액션에서 (currentUser.id == photo.uploader.id) 같은 것을 계속 쓰는 것에 질려 버렸다. 다른 엔티티에도 적용됩니다.
해결법
-
==============================
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.나는 당신이 사용하고있는 어떤 종류의 데이터 접근 기술을 알지 못합니다. 나는 당신이 인터셉터 나 이벤트 리스너를 작성하여 최대 절전 모드에 대한 보안 검사를 할 수 있다는 것을 알고있다. 나는 ibatis도 같은 방식이라고 생각한다. 내 프로젝트에서는 CRUD가 상위 모델 / 엔티티 클래스에서 인터페이스 메소드를 사용 가능하도록 설정하고 엔티티로드 전과 같은 일부 이벤트에서 보안 점검을 수행했습니다. 봄 보안 acl은 약간 복잡합니다. 보안 솔루션을 구현하는 것이 더 좋습니다.
나는 당신이 사용하고있는 어떤 종류의 데이터 접근 기술을 알지 못합니다. 나는 당신이 인터셉터 나 이벤트 리스너를 작성하여 최대 절전 모드에 대한 보안 검사를 할 수 있다는 것을 알고있다. 나는 ibatis도 같은 방식이라고 생각한다. 내 프로젝트에서는 CRUD가 상위 모델 / 엔티티 클래스에서 인터페이스 메소드를 사용 가능하도록 설정하고 엔티티로드 전과 같은 일부 이벤트에서 보안 점검을 수행했습니다. 봄 보안 acl은 약간 복잡합니다. 보안 솔루션을 구현하는 것이 더 좋습니다.
-
==============================
3.액세스 제어 목록 인 ACL의 세계에 오신 것을 환영합니다. 이 튜토리얼은 오래되었지만 꽤 포괄적입니다.
액세스 제어 목록 인 ACL의 세계에 오신 것을 환영합니다. 이 튜토리얼은 오래되었지만 꽤 포괄적입니다.
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
'SPRING' 카테고리의 다른 글
[SPRING] Maven을 사용한 통합 테스트를 위해 전쟁에서 테스트 클래스와 구성을 포함하려면 어떻게해야합니까? (0) | 2019.04.19 |
---|---|
[SPRING] ApplicationContext를로드하지 못했습니다 (주석 첨부). (0) | 2019.04.19 |
[SPRING] 클라이언트가 보낸 요청은 구문 적으로 올바르지 않습니다 (). + Spring, RESTClient (0) | 2019.04.18 |
[SPRING] Spring-WS 1.5를 Spring 3와 함께 사용할 수 있습니까? (0) | 2019.04.18 |
[SPRING] Hibernate 4.3.0.Final & Spring 데이터 JPA 1.4.3.RELEASE (0) | 2019.04.18 |