Article View: cn.bbs.comp.lang.java
Article #21144��ת�ء�JAAS:����Java��ȫ����3
From: Reoal Living In Java
Date: Thu, 11 Dec 2003 09:58
Date: Thu, 11 Dec 2003 09:58
186 lines
10235 bytes
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
[m[1;36m�� ��Դ:��Ʈ��ˮ�Ƽ� Freecity.dhs.org��[FROM: reoal][m
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!FreecityShow 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