🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: cn.bbs.comp.lang.java
Article #21144

��ת�ء�JAAS:����Java��ȫ����3

#21144
From: Reoal Living In Java
Date: Thu, 11 Dec 2003 09:58
186 lines
10235 bytes
�����ļ�

�����������Ѿ��ᵽ��JAAS�Ŀ���չ����Դ�����ܹ����ж�̬���ã���������
Ϣͨ���DZ������ı�����Щ�ı��ļ��кܶ�����ÿ鹹�ɣ�����ͨ������Щ��
�ÿ�������루Application����ÿ�������Ӧ��һ�������ض���LoginModule
����

��������Ĵ��빹��һ��LoginContext����ʱ������Ҫ�������ļ����������
�ƴ��ݸ���LoginContext�����������е���Ϣ����������ЩLoginModule��
�󣬰���ʲô˳�򼤻��Լ�ʹ��ʲô���򼤻

���������ļ��Ľṹ������ʾ:

Application {
ModuleClass Flag ModuleOptions;
ModuleClass Flag ModuleOptions;
..
};
Application {
ModuleClass Flag ModuleOptions;
..
};
.. 

����������һ�����ΪSample������

Sample {
com.sun.security.auth.module.NTLoginModule Rquired debug=true;
} 

������������򵥵�����ָ����LoginContext����Ӧ��ʹ��NTLoginModule����
��֤����������ModuleClass�б�ָ����Flag���Ƶ������а��˶��LoginModule
ʱ���е�¼ʱ����Ϊ��Required��Sufficient��Requisite��Optional�����
����Required��ʹ������ζ�Ŷ�Ӧ��LoginModule������뱻���ã����ұ�����
Ҫͨ�����е���֤������Flag����ĸ����ԣ����������ﲻ�����

����ModuleOption�����ж����������������趨���Բ���ΪTrue��debug=
true�������������������͵�System.out�С�

���������ļ����Ա����������ҿ��Ա������κ�λ�á�JAAS���ͨ��ʹ��
java.securty.auth.long.config������ȷ�������ļ���λ�á����統���Ӧ��
������JaasTest�������ļ��ǵ�ǰĿ¼�µ�jaas.config������Ҫ������������
�룺

java -Djava.security.auth.login.config=jass.config JavaTest

����ͼ�������������ļ��и�Ԫ��֮��Ĺ�ϵ


ͼ�� JAAS�������ļ�  

����ͨ�������з�ʽ���е�¼��֤

����Ϊ��˵��JAAS�����ܸ�ʲô�����������д���������ӡ�һ���Ǽ򵥵���
������������õij�����һ���Ƿ������˵�JSP��������������ͨ���û�
������ķ�ʽ���е�¼��Ȼ��ʹ�ù�ϵ��ݿ���������֤��

����Ϊ��ͨ����ݿ������֤��������Ҫ��

����1. ʵ��RdbmsLoginModul�࣬������Զ��������Ϣ������֤��

����2. �༭һ�������ļ�������LoginContext���ʹ��RdbmsLoginModule��

����3. ʵ��ConsoleCallbackHandler�࣬ͨ�������Ի�ȡ�û������롣

����4. ��дӦ�ó�����롣

������RdbmsLoginModul���У����DZ���ʵ��LgoinModule�ӿ��е����������
������initialize����������

public void initialize(Subject subject, CallbackHandler 
callbackHandler,

Map sharedState, Map options)
{
this.subject = subject;
this.callbackHandler = callbackHandler;
this.sharedState = sharedState;
this.options = options;

url = (String)options.get("url");
driverClass = (String)options.get("driver");
debug = "true".equalsIgnoreCase((String)options.get("debug"));
} 

����LoginContext�ڵ���login��������ʱ�����initialize����������RdbmsLoginModule
�ĵ�һ��������������б��������������á�����֤�ɹ�����Subject����
������Principal�����ƾ֤��

����CallbackHandler���󽫻���login���������б�ʹ�õ���sharedState����
ʹ����ڲ�ͬ��LoginModule����֮�乲�?������������������Dz���ʹ����
���������Ϊoptions��Map����options��LgoinModule���󴫵��������ļ�
ModuleOption���ж���IJ����ֵ�������ļ�������ʾ��

Example {
RdbmsLoginModule required
driver="org.gjt.mm.mysql.Driver"
url="jdbc:mysql://localhost/jaasdb?user=root"
debug="true";
}; 

�����������ļ��У�RdbmsLoginModule���������������driver��url��user
��password�DZ���ģ���debug�ǿ�ѡ������driver��url��user��password��
�����������λ��JDBC���ӡ���Ȼ�㻹������ModuleOption���м�����ݿ�
�еı���е���Ϣ��ʹ����Щ�����Ŀ����Ϊ���ܹ�����ݿ���в�������LoginModule
���initialize�������������DZ�����ÿ�������ֵ��

��������ǰ���ᵽһ��LoginContext��Ӧ�������ļ�������Ӧ��ʹ���ļ��е�
��һ�����롣�����Ϣ��ͨ��LgoinContext�Ĺ��캯��ݵġ������dz�ʼ��
�ͻ��˵Ĵ��룬�ڴ����д�����һ��LoginContex���󲢵�����login��������
��

ConsoleCallbackHandler cbh = new ConsoleCallbackHandler();
LoginContext lc = new LoginContext("Example", cbh);
lc.login(); 

������LgoinContext.login��������������ʱ����������м����˵�LoginModule
�����login���������������ǵ������������RdbmsLoginModule�е�login��
��������

����RdbmsLoginModule�е�login������������������IJ�����

����1. ��������Callback������Щ������û������л�ȡ�û���/���롣��
����ʹ����JAAS�е�����Callback��:NameCallback��PasswordCallback������
�������javax.security.auth.callback������

����2. ͨ��callbacks��Ϊ����ݸ�CallbackHandler��handle����������
����Callback��

����3. ͨ��Callback�������û������롣

����4. ��rdbmsValidate����������ͨ��JDBC����ݿ�����֤��ȡ���û���
���롣

����������RdbmsLoginModule�е�login���������Ĵ���

public boolean login() throws LoginException {
if (callbackHandler == null)
throw new LoginException("no handler");

NameCallback nameCb = new NameCallback("user: ");
PasswordCallback passCb = new PasswordCallback("password: ", true);
callbacks = new Callback[] { nameCb, passCb };
callbackHandler.handle(callbacks);

String username = nameCb.getName();
String password = new String(passCb.getPassword());
success = rdbmsValidate(username, password);

return(true);
} 

������ConsoleCallbackHandler���handle��������������Կ���Callback��
�������ͬ�û����н����ģ�

public void handle(Callback[] callbacks)
throws java.io.IOException, UnsupportedCallbackException {

for (int i = 0; i �� callbacks.length; i++) {
if (callbacks[i] instanceof NameCallback) {
NameCallback nameCb = (NameCallback)callbacks[i];
System.out.print(nameCb.getPrompt());
String user=(new BufferedReader(new 

InputStreamReader(System.in))).readLine();
nameCb.setName(user);
} else if (callbacks[i] instanceof PasswordCallback) {
PasswordCallback passCb = (PasswordCallback)callbacks[i];
System.out.print(passCb.getPrompt());
String pass=(new BufferedReader(new 

InputStreamReader(System.in))).readLine();
passCb.setPassword(pass.toCharArray());
} else {
throw(new UnsupportedCallbackException(callbacks[i],
"Callback class not supported"));
}
}
} 

--
Everything is an object,
and everything is an instance in Java,
so I'm living in Java

�� ��Դ:��Ʈ��ˮ�Ƽ� Freecity.dhs.org��[FROM: reoal]
Technical Details
Message-ID: <49bN48$9SP@Freecity.dhs.org>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news2.google.com!fu-berlin.de!newsfeed.tiscali.ch!tiscali!newsfeed1.ip.tiscali.net!newshosting.com!news-xfer1.atl.newshosting.com!167.206.3.103.MISMATCH!news3.optonline.net!ctu-peer!news.nctu.edu.tw!netnews.csie.nctu.edu.tw!maily.cic.tsinghua.edu.cn!news.ccie.net.cn!Freecity

Show Full Headers
Complete Article Headers
X-Google-Language: Chinese,GB
X-Google-Thread: f6cb0,9f5c10d4a489e639,start
X-Google-Attributes: gidf6cb0,public
X-Google-ArrivalTime: 2003-12-11 01:58:20 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news2.google.com!fu-berlin.de!newsfeed.tiscali.ch!tiscali!newsfeed1.ip.tiscali.net!newshosting.com!news-xfer1.atl.newshosting.com!167.206.3.103.MISMATCH!news3.optonline.net!ctu-peer!news.nctu.edu.tw!netnews.csie.nctu.edu.tw!maily.cic.tsinghua.edu.cn!news.ccie.net.cn!Freecity
From: reoal.bbs@Freecity.dhs.org (Reoal Living In Java)
Newsgroups: cn.bbs.comp.lang.java
Subject: ��ת�ء�JAAS:����Java��ȫ����3
Date: 11 Dec 2003 09:58:57 GMT
Organization: Ʈ��ˮ�Ƽ�
Message-ID: <49bN48$9SP@Freecity.dhs.org>
Mime-Version: 1.0
Content-Type: text/plain; charset="gb2312"
Content-Transfer-Encoding: 8bit
X-Filename: Java/M.1071136712.A
Lines: 186