|
JavaTM Platform Standard Ed. 6 |
|||||||||
앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
java.lang.Objectjavax.security.auth.login.LoginContext
public class LoginContext
LoginContext
클래스는, Subject 를 인증하기 위한 기본적인 메소드를 기술해, 기본이 되는 인증 테크놀러지에 의존하지 않는 어플리케이션 개발의 방법을 제공합니다. Configuration
는, 어플리케이션으로 사용되는 인증 테크놀러지 (LoginModule
)를 지정합니다. 이 때문에, 어플리케이션 자체로 변경을 더하는 일 없이, 어플리케이션에 다른 LoginModule 를 플러그 인 할 수 있습니다.
이 클래스는, 플러그 인 가능한 인증을 지원할 뿐만 아니라, 스택 된 인증의 개념도 지원합니다. 어플리케이션을, 2 개(살) 이상의 LoginModule 를 사용하도록(듯이) 구성할 수 있습니다. 예를 들어, 1 개의 어플리케이션으로 Kerberos LoginModule 와 스마트 카드 LoginModule 의 양쪽 모두를 구성할 수 있습니다.
일반적으로의 호출측은,name 와 CallbackHandler
를 사용해 LoginContext 를 인스턴스화합니다. LoginContext 는,name 를 Configuration 의 인덱스로서 사용해, 사용하는 LoginModule 나, 인증 전체를 성공시키기 위해서(때문에) 성공하지 않으면 안 되는 LoginModule 를 판정합니다. CallbackHandler
는 기본이 되는 LoginModule 에게 건네져 LoginModule 는 사용자와의 주고받아 (그래피컬 사용자 인터페이스로 사용자명과 패스워드의 입력을 요구하는 등)를 실시합니다.
호출측은, LoginContext 를 인스턴스화하면(자),login
메소드를 호출해 Subject
의 인증을 실시합니다. login
메소드는 구성이 끝난 모듈을 호출해, 각종 인증 (사용자명/패스워드를 사용한 인증, 스마트 카드의 PIN 인증등)을 실시합니다. 인증에 실패해도, LoginModule 는 인증을 재시행하지 않습니다. 또, 지연 시간도 발생하지 않습니다. 이러한 태스크는, LoginContext 의 호출측이 담당합니다.
login
메소드가 예외를 throw 하는 일 없이 되돌아 왔을 경우는, 인증 전체에 성공한 것이 됩니다. 그리고, 호출측은 getSubject
메소드를 호출하는 것으로, 새롭게 인증된 Subject
를 취득할 수 있습니다. Subject
와 관련지을 수 있었던 Principal 와 Credential 는, Subject 의 getPrincipals
,getPublicCredentials
, 및 getPrivateCredentials
의 각 메소드를 호출하는 것으로 취득할 수 있습니다.
Subject 를 로그아웃 시키는 경우, 호출측은 logout
메소드를 호출합니다. login
메소드의 경우와 같이, 이 logout
메소드는 구성이 끝난 모듈의 logout
메소드를 호출합니다.
1 개의 LoginContext 로 복수의 Subject 를 인증할 수 없습니다. Subject 마다 별개의 LoginContext 를 사용할 필요가 있습니다.
다음의 내용은, 모든 LoginContext 생성자 에 적용됩니다.
주제
null
Subject 를 지정했을 경우로,null
치가 허가되고 있을 때, LoginContext 는 새로운 Subject 를 인스턴스화한다.
구성
생성자 에 Configuration 입력 파라미터가 지정되어 있지 않은 경우, 또는 호출해 옆이 null
Configuration 객체를 지정했을 경우, 생성자 은 다음의 호출을 사용해 인스톨 끝난 Configuration 를 취득한다.
config = Configuration.getConfiguration();어느 쪽의 경우도, 생성자 으로 지정된 name 인수는
Configuration.getAppConfigurationEntry
메소드에게 건네진다. Configuration 가 지정된 name 의 엔트리를 가지지 않는 경우,LoginContext
는, 디폴트의 엔트리명인 「other」로 getAppConfigurationEntry
를 호출한다. 「other」의 엔트리가 존재하지 않는 경우,LoginException
가 throw 된다.
AccessController.doPrivileged
로부터 구성이 끝난 모듈을 호출한다. 이것은, 시큐리티 보호의 필요가 있는 태스크 (원격 호스트에게로의 접속, Subject 의 갱신등)를 실행하는 모듈이 각각 적절한 액세스권을 필요로 하는데 대해, LoginContext 의 호출측은 이러한 액세스권을 필요로 하지 않기 때문이다.
AccessControlContext
을 보존해, 그 문맥의 제약을 부과된 AccessController.doPrivileged 호출로부터로 구성이 끝난 모듈을 호출한다. 즉, 호출측의 문맥 (LoginContext 의 작성시에 보존된 문맥)은, 모듈이 실행하는 시큐리티 보호를 필요로 하는 태스크의 실행에 필요한 액세스권을 갖추고 있을 필요가 있다.
CallbackHandler
null
CallbackHandler 객체를 지정해, 한편 null
치가 허가되고 있는 경우, LoginContext 는 auth.login.defaultCallbackHandler 시큐리티 프로퍼티으로부터 디폴트의 핸들러 구현의 완전 수식 클래스명을 조회한다. 이 시큐리티 프로퍼티이 설정되어 있지 않은 경우, 부하의 모듈은 사용자와의 통신에 사용하는 CallbackHandler 를 가지지 않는다. 이 때문에, 호출측은, 구성이 끝난 모듈이 다른 수단으로 사용자 인증을 실시할 수가 있으면(자) 상정한다.
handle
메소드 구현은, 호출측의 현재의 AccessControlContext
에 의해 제약을 부과된 java.security.AccessController.doPrivileged
호출내에서, 지정된 CallbackHandler 의 handle
메소드를 호출할 필요가 있다.
auth.login.defaultCallbackHandler
등의 시큐리티 프로퍼티은,java.security.Security
클래스를 사용해 프로그램으로부터 설정하는지, <JAVA_HOME>/lib/security/java.security 파일에 포함되고 있는 Java 시큐리티 프로퍼티 파일을 사용해 정적으로 설정할 수 있습니다. < JAVA_HOME> 는, java.home 시스템 프로퍼티의 값을 참조해, JRE 의 인스톨 디렉토리를 나타냅니다.
Security
,
AuthPermission
,
Subject
,
CallbackHandler
,
Configuration
,
LoginModule
생성자 의 개요 | |
---|---|
LoginContext (String name)
이름을 지정해 새로운 LoginContext 를 인스턴스화합니다. |
|
LoginContext (String name,
CallbackHandler callbackHandler)
이름과 CallbackHandler 를 지정해, 새로운 LoginContext 객체를 인스턴스화합니다. |
|
LoginContext (String name,
Subject subject)
이름과 Subject 를 지정해, 새로운 LoginContext 객체를 인스턴스화합니다. |
|
LoginContext (String name,
Subject subject,
CallbackHandler callbackHandler)
이름, 인증을 받는 Subject 객체, 및 CallbackHandler 객체를 지정해, 새로운 LoginContext 객체를 인스턴스화합니다. |
|
LoginContext (String name,
Subject subject,
CallbackHandler callbackHandler,
Configuration config)
이름, 인증을 받는 Subject 객체,CallbackHandler 객체, 및 로그인 Configuration 를 지정해, 새로운 LoginContext 객체를 인스턴스화합니다. |
메소드의 개요 | |
---|---|
Subject |
getSubject ()
인증된 Subject 를 돌려줍니다. |
void |
login ()
인증을 실행합니다. |
void |
logout ()
Subject 를 로그아웃 합니다. |
클래스 java.lang. Object 로부터 상속된 메소드 |
---|
clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait |
생성자 의 상세 |
---|
public LoginContext(String name) throws LoginException
LoginContext
를 인스턴스화합니다.
name
- Configuration
의 인덱스로서 사용되는 이름
LoginException
- 호출측에서 지정된 name
가 Configuration
에 없고, 「other」의 Configuration
엔트리가 없는 경우, 또는 auth.login.defaultCallbackHandler 시큐리티 프로퍼티이 설정되어 있는 것에도 불구하고, 구현 클래스를 로드할 수 없었던 경우
SecurityException
- SecurityManager 가 설정되어 있어, 호출측이 AuthPermission("createLoginContext. name")를 가지지 않는 경우, 또는 name 의 구성 엔트리가 존재하지 않고, 호출측이 AuthPermission("createLoginContext.other")를 가지지 않는 경우public LoginContext(String name, Subject subject) throws LoginException
Subject
를 지정해, 새로운 LoginContext
객체를 인스턴스화합니다.
name
- Configuration
의 인덱스로서 사용되는 이름 subject
- 인증 대상의 Subject
LoginException
- 호출측에서 지정된 name
가 Configuration
에 없고, 「other」라고 하는 Configuration
엔트리가 없는 경우, 호출측에서 지정된 subject
가 null 의 경우, 혹은,auth.login.defaultCallbackHandler
시큐리티 프로퍼티이 설정되어 있는 것에도 불구하고, 구현 클래스를 로드할 수 없었던 경우
SecurityException
- SecurityManager 가 설정되어 있어, 호출측이 AuthPermission("createLoginContext. name")를 가지지 않는 경우, 또는 name 의 구성 엔트리가 존재하지 않고, 호출측이 AuthPermission("createLoginContext.other")를 가지지 않는 경우public LoginContext(String name, CallbackHandler callbackHandler) throws LoginException
CallbackHandler
를 지정해, 새로운 LoginContext
객체를 인스턴스화합니다.
name
- Configuration
의 인덱스로서 사용되는 이름 callbackHandler
- LoginModule 가 사용자와 교환하기 위해서(때문에) 사용하는 CallbackHandler
객체
LoginException
- 호출측에서 지정된 name
가 Configuration
에 없고, 「other」의 Configuration
엔트리가 없는 경우, 또는 호출해 옆에서 지정된 callbackHandler
가 null
의 경우
SecurityException
- SecurityManager 가 설정되어 있어, 호출측이 AuthPermission("createLoginContext. name")를 가지지 않는 경우, 또는 name 의 구성 엔트리가 존재하지 않고, 호출측이 AuthPermission("createLoginContext.other")를 가지지 않는 경우public LoginContext(String name, Subject subject, CallbackHandler callbackHandler) throws LoginException
Subject
객체, 및 CallbackHandler
객체를 지정해, 새로운 LoginContext
객체를 인스턴스화합니다.
name
- Configuration
의 인덱스로서 사용되는 이름 subject
- 인증 대상의 Subject
callbackHandler
- LoginModule 가 사용자와 교환하기 위해서(때문에) 사용하는 CallbackHandler
객체
LoginException
- 호출측에서 지정된 name
가 Configuration
에 없고, 「other」의 Configuration
엔트리가 없는 경우, 호출측에서 지정된 subject
가 null
의 경우, 또는 호출해 옆에서 지정된 callbackHandler
가 null
의 경우
SecurityException
- SecurityManager 가 설정되어 있어, 호출측이 AuthPermission("createLoginContext. name")를 가지지 않는 경우, 또는 name 의 구성 엔트리가 존재하지 않고, 호출측이 AuthPermission("createLoginContext.other")를 가지지 않는 경우public LoginContext(String name, Subject subject, CallbackHandler callbackHandler, Configuration config) throws LoginException
Subject
객체,CallbackHandler
객체, 및 로그인 Configuration
를 지정해, 새로운 LoginContext
객체를 인스턴스화합니다.
name
- 호출측에서 지정된 Configuration
의 인덱스로서 사용되는 이름 subject
- 인증 대상의 Subject
, 또는 null
callbackHandler
- LoginModule 가 사용자와의 주고받아에 사용하는 CallbackHandler
객체, 또는 null
config
- 인증을 실시하기 위해서(때문에) 불려 가는 로그인 모듈을 리스트 하는 Configuration
, 또는 null
LoginException
- 호출측에서 지정된 name
가 Configuration
에 존재하지 않고, 「other」의Configuration
엔트리가 없는 경우
SecurityException
- SecurityManager 가 설정되어 있어,config 가 null
로, 한편 호출해 옆이 AuthPermission("createLoginContext. name")를 가지지 않는 경우, 또는 name 의 구성 엔트리가 존재하지 않고, 호출측이 AuthPermission("createLoginContext.other")를 가지지 않는 경우메소드의 상세 |
---|
public void login() throws LoginException
이 메소드는, 로그인 Configuration
의 정의에 따라,LoginContext
생성자 으로 지정된 name 용으로 설정된 각 LoginModule 에 대해서 login
메소드를 호출합니다. 그러자(면), 각 LoginModule
에 의해, 각종 인증 (사용자명/패스워드의 인증, 스마트 카드의 PIN 인증등)이 실행됩니다.
이 메소드에서는, LoginContext 의 인증 전체가 성공했을 경우 (관련하는 REQUIRED, REQUISITE, SUFFICIENT, OPTIONAL 의 LoginModule 이 성공)에 구성 끝난 LoginModule 에 대해서 commit
메소드를 호출하는지, 인증 전체가 실패했을 경우에 구성 끝난 각 LoginModule 에 대해서 abort
메소드를 호출하는 것으로, 2 국면의 인증 프로세스가 완료합니다. 인증에 성공했을 경우는, 성공한 각 LoginModule 의 commit
메소드에 의해, 관련하는 Principal 와 Credential 가,Subject
와 관련지을 수 있습니다. 인증에 실패했을 경우는, 각 LoginModule 의 abort
메소드에 의해, 일단 보존되고 있던 상태를 삭제 또는 파기합니다.
인증 프로세스의 commit
국면에 실패하면(자) 인증 전체가 실패해, 이 메소드는 구성 끝난 각 LoginModule
에 대해서 abort
메소드를 호출합니다.
어떠한 이유로써 abort
국면이 실패해도,login
국면중이나 commit
국면중에 throw 된 원의 예외를 전달합니다. 어느 쪽의 경우도, 인증 전체가 실패합니다.
복수의 LoginModule 으로 실패했을 경우, 최초로 실패한 LoginModule
로 발생한 예외를 전달합니다.
이 메소드가 abort
국면에 들어갔을 (login
국면이나 commit
국면에 실패할) 경우, 어플리케이션용으로 구성된 모든 LoginModule 가, 각각의 Configuration
플래그 파라미터와는 관계없이 불려 갑니다. 즉,abort
국면중은,Requisite
와 Sufficient
의 시멘틱스는 무시됩니다. 이것에 의해, 적절한 클린 업과 상태의 복원을 실시하는 것이 보증됩니다.
LoginException
- 인증에 실패했을 경우public void logout() throws LoginException
Subject
를 로그아웃 합니다.
이 메소드는, 이 LoginContext
용으로 구성된 각 LoginModule
의 logout
메소드를 호출합니다. 각 LoginModule
는, 각각의 로그아웃 처리를 실시합니다. 로그아웃 처리에는,Subject
로부터의 Principal
나 Credential
의 삭제/파기나, 상태의 클린 업등이 포함됩니다.
이 메소드에서는, 어플리케이션용으로 구성된 모든 LoginModule 가, 각각의 Configuration
플래그 파라미터에 관계없이 불려 갑니다. 즉, 이 메소드에서는,Requisite
와 Sufficient
의 시멘틱스는 무시됩니다. 이것에 의해, 적절한 클린 업과 상태의 복원을 실시하는 것이 보증됩니다.
LoginException
- 로그아웃에 실패했을 경우public Subject getSubject()
|
JavaTM Platform Standard Ed. 6 |
|||||||||
앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.