스프링 보안은 ObjectIdentity 인터페이스를 통해 도메인 개체에 대한 사용 권한을 간접적으로 부여합니다.
당신은 언급으로, 지금까지 일반적인 경우는 도메인 개체의 ObjectIdentityImpl
를 구축 한 후 만들거나 먼저 도메인 오브젝트를 확보하고 있다는 점이다 기준 :
MyDomainObject secured = new MyDomainObject();
ObjectIdentity securedIdentity = new ObjectIdentityImpl(secured);
당신은 다음을 검색 할 ObjectIdentity
인스턴스를 사용 ACL은 스프링 보안 프레임 워크를 사용합니다.
그러나 개체 ID를 사용하는 유일한 방법은 아닙니다. 실제 비즈니스 오브젝트가 아닌 objectIdentity에 대한 참조를 전달할 수 있지만, 작성된 경우이를 식별하는 수단이 있습니다.
예를 들어 파일을 보호하려고한다고 가정 해보십시오. 보안되고있는 java.io.File
인스턴스로 ObjectItentity를 생성 할 수 있습니다. ID에있는 File
객체는 파일에 대한 참조 일 뿐이며 실제 파일은 없습니다. 파일이 존재하지 않을 수도 있지만 우리는 보안에 대한 이유와 ACL을 가져올 수있는 ObjectIdentity를가집니다.
이 패턴은 모든 종류의 도메인 개체에 적용 할 수 있습니다. 보안을 유지하는 데 필요한 도메인 기능과 관련하여 도메인 개체를 설명하지만 실제로 도메인 개체에 대한 참조가 필요하지는 않은 DomainObjectPrototype
구현을 만듭니다. 이 서비스는 도메인 객체를 실제로 만들 때 필요한 세부 정보로 생각할 수 있습니다.
추신 : 절대로 스프링 보안을 사용 해본 적이 없다고 고백하자. example을보고 나면 설계 패턴이 나에게 분명 해 보인다.
EDIT : 원래대로 쓴대로 ObjectIdentity의 구현을 만들 필요가 없습니다.
답변 해 주셔서 감사합니다. 나는 명확히하고 싶다. Widget 클래스의 생성을 제한하려면 다음과 같이 할 수 있습니까? ObjectIdentity securedIdentity = new ObjectIdentityImpl (위젯. 클래스, 위젯.RESERVED_CLASS_ID); 그런 다음 작성 권한이 일부 sid에 허용되었는지 확인합니다. –
액세스 제어가 위젯 클래스의 특정 인스턴스에 종속되지 않으면이를 수행 할 수 있습니다. 인스턴스 별 컨트롤이 필요한 경우 액세스 제어를 정의하는 데 필요한 도메인 특성을 포함하는 WidgetPrototype 클래스를 만듭니다. – mdma