JavaTM Platform
Standard Ed. 6

javax.security.auth
클래스 Subject

java.lang.Object 
  상위를 확장 javax.security.auth.Subject
모든 구현된 인터페이스:
Serializable


public final class Subject
extends Object
implements Serializable

Subject 는, 개인등의 단일 엔티티에 관한 관련 정보를 그룹화 한 것입니다. 이런 종류의 정보에는, Subject 의 식별 정보나, 시큐리티 관련의 속성 (패스워드나 암호화열쇠등)이 포함됩니다.

Subject 는, 복수의 식별 정보를 가지는 경우가 있습니다. 각각의 식별 정보는,Subject 내의 Principal 로 나타내집니다. Principal 는 단지 이름을 Subject 에 바인드 하고 있을 뿐입니다. 예를 들어, Alice 라고 하는 개인의 Subject 에는, Alice 의 운전 면허증의 이름 「Alice Bar」가 Subject 에 바인드 하고 있는 Principal 와 학생 번호 「999-99-9999」이 Subject 에 바인드 하고 있는 Principal 의 2 개가 있습니다. 어느 쪽의 Principal 도, 다른 이름이어도 같은 Subject 를 참조하고 있습니다.

Subject 는, 「자격」이라고 불리는 시큐리티 관련의 속성도 보관 유지할 수 있습니다. 비공개 암호화열쇠 등, 특별한 보호가 필요한 자격은, 비공개 자격 Set 내에 포함됩니다. 공개키 증명서나 Kerberos 서버 티켓과 같이, 공유되어야 할 자격은, 공개 자격 Set 에 포함됩니다. 자격 Set 가 다르면(자), 거기에 액세스 및 변경하기 위한 액세스권도 다릅니다.

Subject 에 관련지을 수 있던 모든 Principal 를 가져오려면 ,getPrincipals 메소드를 호출합니다. Subject 에 속하는 공개 또는 비공개의 자격을 모두 가져오려면 ,getPublicCredentials 메소드나 getPrivateCredentials 메소드를 호출합니다. 반환된 Principal 와 자격의 Set 를 변경하려면 ,Set 클래스에서 정의되고 있는 메소드를 사용합니다. 다음에 예를 나타냅니다.

        Subject subject;
        Principal principal;
        Object credential;

        // add a Principal and credential to the Subject
        subject.getPrincipals(). add(principal);
        subject.getPublicCredentials(). add(credential);
 

Subject 클래스는,Serializable 를 구현합니다. Subject 에 관련지을 수 있었던 Principal 는 직렬화 됩니다만,Subject 에 관련지을 수 있었던 자격은 직렬화 되지 않습니다. java.security.Principal 클래스는 Serializable 를 구현하고 있습니다. 그 때문에, Subject 에 관련지을 수 있던 구체적인 Principal 구현은 모두,Serializable 를 구현할 필요가 있습니다.

관련 항목:
Principal , DomainCombiner , 직렬화 된 형식

생성자 의 개요
Subject ()
          빈 상태(empty)의 Principal 의 Set 와 빈 상태(empty)의 공개 자격 및 비공개 자격의 Set 로, Subject 의 인스턴스를 작성합니다.
Subject (boolean readOnly, Set <? extends Principal > principals, Set <? > pubCredentials, Set <? > privCredentials)
          Principal 와 자격을 지정해,Subject 의 인스턴스를 작성합니다.
 
메소드의 개요
static
<T> T
doAs (Subject  subject, PrivilegedAction <T> action)
          특정의 Subject 로서 동작합니다.
static
<T> T
doAs (Subject  subject, PrivilegedExceptionAction <T> action)
          특정의 Subject 로서 동작합니다.
static
<T> T
doAsPrivileged (Subject  subject, PrivilegedAction <T> action, AccessControlContext  acc)
          특정의 Subject 로서 특권 첨부로 동작합니다.
static
<T> T
doAsPrivileged (Subject  subject, PrivilegedExceptionAction <T> action, AccessControlContext  acc)
          특정의 Subject 로서 특권 첨부로 동작합니다.
 boolean equals (Object  o)
          지정한 Object 와 이 Subject 가 동일한지 어떤지를 비교합니다.
 Set <Principal > getPrincipals ()
          이 Subject 에 관련지을 수 있었던 Principal 의 Set 를 돌려줍니다.
<T extends Principal >
Set <T>
getPrincipals (Class <T> c)
          지정한 Class 의 인스턴스 또는 서브 클래스인, 이 Subject 에 관련지을 수 있었던 Principal 의 Set 를 돌려줍니다.
 Set <Object > getPrivateCredentials ()
          이 Subject 가 보관 유지하는 비공개 자격의 Set 를 돌려줍니다.
<T> Set <T>
getPrivateCredentials (Class <T> c)
          지정한 Class 의 인스턴스 또는 서브 클래스인 이 Subject 에 관련한 비공개 자격의 Set 를 돌려줍니다.
 Set <Object > getPublicCredentials ()
          이 Subject 가 보관 유지하는 공개 자격의 Set 를 돌려줍니다.
<T> Set <T>
getPublicCredentials (Class <T> c)
          지정한 Class 의 인스턴스 또는 서브 클래스인 이 Subject 에 관련한 공개 자격의 Set 를 돌려줍니다.
static Subject getSubject (AccessControlContext  acc)
          지정한 AccessControlContext 에 관련지을 수 있었던 Subject 를 가져옵니다.
 int hashCode ()
          이 Subject 의 해시 코드를 돌려줍니다.
 boolean isReadOnly ()
          이 Subject 가 읽어내 전용일지 어떨지를 문의합니다.
 void setReadOnly ()
          이 Subject 를 읽어내 전용으로 설정합니다.
 String toString ()
          이 Subject 의 String 표현을 돌려줍니다.
 
클래스 java.lang. Object 로부터 상속된 메소드
clone , finalize , getClass , notify , notifyAll , wait , wait , wait
 

생성자 의 상세

Subject

public Subject()
빈 상태(empty)의 Principal 의 Set 와 빈 상태(empty)의 공개 자격 및 비공개 자격의 Set 로, Subject 의 인스턴스를 작성합니다.

새롭게 작성된 Set 에서는, 이후의 변경을 허가하기 전에, 이 Subject 가 읽어내 전용으로 설정되어 있는지 어떤지를 확인할 필요가 있습니다. 새롭게 작성된 Set 는, 호출 측에 충분한 액세스권이 있는 것을 확인하는 것에 의해, 부정한 변경을 예방합니다.

Principals Set 를 변경하려면 , 호출 측에 AuthPermission("modifyPrincipals") 가 필요합니다. 공개 자격 Set 를 변경하려면 , 호출 측에 AuthPermission("modifyPublicCredentials") 가 필요합니다. 비공개 자격 Set 를 변경하려면 , 호출 측에 AuthPermission("modifyPrivateCredentials") 가 필요합니다.


Subject

public Subject(boolean readOnly,
               Set <?  extends Principal > principals,
               Set <? > pubCredentials,
               Set <? > privCredentials)
Principal 와 자격을 지정해,Subject 의 인스턴스를 작성합니다.

Principal 와 자격은, 지정된 Set 로부터 새롭게 작성된 Set 에 카피됩니다. 이러한 새롭게 작성된 Set 에서는, 이후의 변경을 허가하기 전에, 이 Subject 가 읽어내 전용으로 설정되어 있는지 어떤지를 확인할 필요가 있습니다. 새롭게 작성된 Set 는, 호출 측에 충분한 액세스권이 있는 것을 확인하는 것에 의해, 부정한 변경을 예방합니다.

Principals Set 를 변경하려면 , 호출 측에 AuthPermission("modifyPrincipals") 가 필요합니다. 공개 자격 Set 를 변경하려면 , 호출 측에 AuthPermission("modifyPublicCredentials") 가 필요합니다. 비공개 자격 Set 를 변경하려면 , 호출 측에 AuthPermission("modifyPrivateCredentials") 가 필요합니다.  

파라미터:
readOnly - Subject 가 읽어내 전용의 경우는 true, 그렇지 않은 경우는 false

principals - 이 Subject 에 관련짓는 Principal 의 Set

pubCredentials - 이 Subject 에 관련짓는 공개 자격의 Set

privCredentials - 이 Subject 에 관련짓는 비공개 자격의 Set
예외:
NullPointerException - 지정된 principals,pubCredentials,privCredentials 의 어떤 것인가가 null 의 경우
메소드의 상세

setReadOnly

public void setReadOnly()
Subject 를 읽어내 전용으로 설정합니다.

이 Subject 의 PrincipalSet 나 자격 Set 에 대한 변경 (추가나 삭제)은 허가되지 않습니다. 이 Subject 의 자격에 대한 destroy 조작만이 허가됩니다.

그 후, Subject 의 Principal 나 자격의 Set 를 변경하려고 하면(자),IllegalStateException 가 throw 됩니다. 또,Subject 를 읽어내 전용으로 한 후에, 한번 더 기입할 수 있도록(듯이) 리셋 할 수 없습니다.

예외:
SecurityException - 호출 측에, 이 Subject 를 읽어내 전용으로 설정하는 액세스권이 없는 경우

isReadOnly

public boolean isReadOnly()
Subject 가 읽어내 전용일지 어떨지를 문의합니다.

반환값:
Subject 가 읽어내 전용인 경우는 true, 그렇지 않은 경우는 false

getSubject

public static Subject  getSubject(AccessControlContext  acc)
지정한 AccessControlContext 에 관련지을 수 있었던 Subject 를 가져옵니다.

AccessControlContext 에, 많은 Subject 가 포함되는 경우가 있습니다 (상자로 된 doAs 호출에 의한다). 이 경우,AccessControlContext 에 관련지을 수 있었던 최신의 Subject 가 돌려주어집니다.

파라미터:
acc - Subject 를 취득하는 AccessControlContext
반환값:
AccessControlContext 에 관련지을 수 있었던 Subject. 이 AccessControlContext 에 관련지을 수 있었던 Subject 가 없는 경우는 null
예외:
SecurityException - 호출 측에, 이 Subject 를 취득하는 액세스권이 없는 경우

NullPointerException - 지정된 AccessControlContextnull 의 경우

doAs

public static <T> T doAs(Subject  subject,
                         PrivilegedAction <T> action)
특정의 Subject 로서 동작합니다.

이 메소드에서는, 최초로 현재의 Thread 의 AccessControlContextAccessController.getContext 로 취득해, 취득한 문맥과 (지정한 Subject 로 구축한) 새로운 SubjectDomainCombiner 를 사용해 새로운 AccessControlContext 를 인스턴스화합니다. 마지막으로,AccessController.doPrivileged 를 호출해, 지정한 PrivilegedAction 과 새롭게 구축한 AccessControlContext 를 건네줍니다.

파라미터:
subject - 지정한 action 가 실행될 때의 Subject. 이 파라미터에는 null 를 설정할 수 있는

action - 지정한 Subject 로서 실행되는 코드

반환값:
PrivilegedAction 의 run 메소드에 의해 반환되는 값
예외:
NullPointerException - PrivilegedActionnull 의 경우

SecurityException - 호출 측에, 이 메소드를 호출하는 액세스권이 없는 경우

doAs

public static <T> T doAs(Subject  subject,
                         PrivilegedExceptionAction <T> action)
              throws PrivilegedActionException 
특정의 Subject 로서 동작합니다.

이 메소드에서는, 최초로 현재의 Thread 의 AccessControlContextAccessController.getContext 로 취득해, 취득한 문맥과 (지정한 Subject 로 구축한) 새로운 SubjectDomainCombiner 를 사용해 새로운 AccessControlContext 를 인스턴스화합니다. 마지막으로,AccessController.doPrivileged 를 호출해, 지정한 PrivilegedExceptionAction 와 새롭게 구축한 AccessControlContext 를 건네줍니다.

파라미터:
subject - 지정한 action 가 실행될 때의 Subject. 이 파라미터에는 null 를 설정할 수 있는

action - 지정한 Subject 로서 실행되는 코드

반환값:
PrivilegedExceptionAction 의 run 메소드에 의해 반환되는 값
예외:
PrivilegedActionException - PrivilegedExceptionAction.run 메소드가 체크 예외를 throw 했을 경우

NullPointerException - 지정한 PrivilegedExceptionActionnull 의 경우

SecurityException - 호출 측에, 이 메소드를 호출하는 액세스권이 없는 경우

doAsPrivileged

public static <T> T doAsPrivileged(Subject  subject,
                                   PrivilegedAction <T> action,
                                   AccessControlContext  acc)
특정의 Subject 로서 특권 첨부로 동작합니다.

이 메소드의 동작은, 현재의 Thread 의 AccessControlContext 를 취득하는 대신에, 지정한 AccessControlContext 을 사용하는 점을 제외해,Subject.doAs 와 같게 됩니다. 지정된 AccessControlContextnull 의 경우, 이 메소드는 ProtectionDomain 의 빈 상태(empty)의 컬렉션을 사용해, 신규 AccessControlContext 를 인스턴스화합니다.

파라미터:
subject - 지정한 action 가 실행될 때의 Subject. 이 파라미터에는 null 를 설정할 수 있는

action - 지정한 Subject 로서 실행되는 코드

acc - 지정한 subjectaction 를 묶을 수 있고 있는 AccessControlContext

반환값:
PrivilegedAction 의 run 메소드에 의해 반환되는 값
예외:
NullPointerException - PrivilegedActionnull 의 경우

SecurityException - 호출 측에, 이 메소드를 호출하는 액세스권이 없는 경우

doAsPrivileged

public static <T> T doAsPrivileged(Subject  subject,
                                   PrivilegedExceptionAction <T> action,
                                   AccessControlContext  acc)
                        throws PrivilegedActionException 
특정의 Subject 로서 특권 첨부로 동작합니다.

이 메소드의 동작은, 현재의 Thread 의 AccessControlContext 를 취득하는 대신에, 지정한 AccessControlContext 을 사용하는 점을 제외해,Subject.doAs 와 같게 됩니다. 지정된 AccessControlContextnull 의 경우, 이 메소드는 ProtectionDomain 의 빈 상태(empty)의 컬렉션을 사용해, 신규 AccessControlContext 를 인스턴스화합니다.

파라미터:
subject - 지정한 action 가 실행될 때의 Subject. 이 파라미터에는 null 를 설정할 수 있는

action - 지정한 Subject 로서 실행되는 코드

acc - 지정한 subjectaction 를 묶을 수 있고 있는 AccessControlContext

반환값:
PrivilegedExceptionAction 의 run 메소드에 의해 반환되는 값
예외:
PrivilegedActionException - PrivilegedExceptionAction.run 메소드가 체크 예외를 throw 했을 경우

NullPointerException - 지정한 PrivilegedExceptionActionnull 의 경우

SecurityException - 호출 측에, 이 메소드를 호출하는 액세스권이 없는 경우

getPrincipals

public Set <Principal > getPrincipals()
Subject 에 관련지을 수 있었던 Principal 의 Set 를 돌려줍니다. 각 Principal 는, 이 Subject 의 식별 정보를 나타냅니다.

반환되는 Set 는, 이 Subject 의 내부적인 PrincipalSet 와 연동하고 있습니다. 반환된 Set 에 대한 변경은, 내부의 PrincipalSet 에도 영향을 줍니다.

반환값:
Subject 에 관련지을 수 있었던 Principal 의 Set

getPrincipals

public <T extends Principal > Set <T> getPrincipals(Class <T> c)
지정한 Class 의 인스턴스 또는 서브 클래스인, 이 Subject 에 관련지을 수 있었던 Principal 의 Set 를 돌려줍니다.

반환되는 Set 는, 이 Subject 의 내부적인 PrincipalSet 와 연동하고 있습니다. 각 메소드의 호출에 대해서, 새로운 Set 가 작성되어 돌려주어집니다. 반환된 Set 에 대한 변경은, 내부적인 PrincipalSet 에 영향을 주지 않습니다.

파라미터:
c - 반환되는 Principal 의 Set 는, 모두 이 클래스의 인스턴스가 된다
반환값:
지정한 Class 의 인스턴스인 Principal 의 Set
예외:
NullPointerException - 지정한 Classnull 의 경우

getPublicCredentials

public Set <Object > getPublicCredentials()
Subject 가 보관 유지하는 공개 자격의 Set 를 돌려줍니다.

반환되는 Set 는, 이 Subject 의 내부적인 공개 Credential 의 Set 와 연동하고 있습니다. 반환된 Set 에 대한 변경은, 내부적인 공개 Credential 의 Set 에도 영향을 줍니다.

반환값:
Subject 가 보관 유지하는 공개 자격의 Set

getPrivateCredentials

public Set <Object > getPrivateCredentials()
Subject 가 보관 유지하는 비공개 자격의 Set 를 돌려줍니다.

반환되는 Set 는, 이 Subject 의 내부적인 비공개 Credential 의 Set 와 연동하고 있습니다. 반환된 Set 에 대한 변경은, 내부적인 비공개 Credential 의 Set 에도 영향을 줍니다.

호출측에서는, 반환되는 Set 의 Credential 에 액세스하기 위한 권한, 또는 Set 자체를 변경하기 위한 액세스권이 필요합니다. 호출 측에 적절한 액세스권이 없는 경우는,SecurityException 가 throw 됩니다.

Set 를 반복 처리 할 때, 호출 측에 특정의 Credential 에 대한 액세스권이 없는 경우는,SecurityException 가 throw 됩니다. 그 경우에서도,IteratorSet 의 다음의 요소에 처리를 진행시킵니다.

반환값:
Subject 가 보관 유지하는 비공개 자격의 Set

getPublicCredentials

public <T> Set <T> getPublicCredentials(Class <T> c)
지정한 Class 의 인스턴스 또는 서브 클래스인 이 Subject 에 관련한 공개 자격의 Set 를 돌려줍니다.

반환되는 Set 는, 이 Subject 의 내부적인 공개 Credential 의 Set 와 연동하고 있습니다. 각 메소드의 호출에 대해서, 새로운 Set 가 작성되어 돌려주어집니다. 반환된 Set 에 대한 변경은, 내부적인 공개 Credential 의 Set 에 영향을 주지 않습니다.

파라미터:
c - 반환되는 공개 자격의 Set 는, 모두 이 클래스의 인스턴스가 된다
반환값:
지정한 Class 의 인스턴스인 공개 자격의 Set
예외:
NullPointerException - 지정한 Classnull 의 경우

getPrivateCredentials

public <T> Set <T> getPrivateCredentials(Class <T> c)
지정한 Class 의 인스턴스 또는 서브 클래스인 이 Subject 에 관련한 비공개 자격의 Set 를 돌려줍니다.

호출 측에는, 요구한 Credential 모두에 대한 액세스권이 없으면 안됩니다. 그렇지 않은 경우는,SecurityException 가 throw 됩니다.

반환되는 Set 는, 이 Subject 의 내부적인 비공개 Credential 의 Set 와 연동하고 있습니다. 각 메소드의 호출에 대해서, 새로운 Set 가 작성되어 돌려주어집니다. 반환된 Set 에 대한 변경은, 내부적인 비공개 Credential 의 Set 에 영향을 주지 않습니다.

파라미터:
c - 반환되는 비공개 자격의 Set 는, 모두 이 클래스의 인스턴스가 된다
반환값:
지정한 Class 의 인스턴스인 비공개 자격의 Set
예외:
NullPointerException - 지정한 Classnull 의 경우

equals

public boolean equals(Object  o)
지정한 Object 와 이 Subject 가 동일한지 어떤지를 비교합니다. 지정한 객체가 Subject 이며, 2 개의 Subject 인스턴스가 등가인 경우에 true 를 돌려줍니다. 보다 정확하게는,Principal 의 Set 와 Credential 의 Set 가 동일한 경우에, 2 개의 Subject 인스턴스는 동일해집니다.

오버라이드(override):
클래스 Object 내의 equals
파라미터:
o - 이 Subject 와 동일한지 어떤지를 비교하는 Object
반환값:
지정된 Object 가 이 Subject 와 동일한 경우는 true
예외:
SecurityException - 호출 측에 이 Subject 의 비공개 자격에의 액세스권이 없는 경우, 또는 호출해 측에 지정한 Subject 의 비공개 자격에의 액세스권이 없는 경우
관련 항목:
Object.hashCode() , Hashtable

toString

public String  toString()
Subject 의 String 표현을 돌려줍니다.

오버라이드(override):
클래스 Object 내의 toString
반환값:
Subject 의 String 표현

hashCode

public int hashCode()
Subject 의 해시 코드를 돌려줍니다.

오버라이드(override):
클래스 Object 내의 hashCode
반환값:
Subject 의 해시 코드
예외:
SecurityException - 호출 측에 이 Subject 의 비공개 자격에의 액세스권이 없는 경우
관련 항목:
Object.equals(java.lang.Object) , Hashtable

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.