使用 run-as 标识将应用程序连接到缺省消息传递提供程序
2009-09-29 00:00:00 来源:WEB开发网commit 登录处理成功完成后调用一次。此方法对 Subject 进行填充。
logout 在此解决方案中不使用。
abort 将在登录失败后调用。此解决方案中并未使用此方法。
清单 1 包含类定义、将稍后使用的一些字段以及 initialize 方法。initialize 方法将直接复制传入的 Subject。
清单 1. LoginModule 初始化
public class SIBRunAsLoginModule implements LoginModule
{
/** The subject that will be passed to the resource adapter */
private Subject _subjectBeingLoggedOn;
/** the current application run-as subject */
private Subject _runAsSubject;
public void initialize(Subject subject, CallbackHandler callbackHandler,
Map sharedState, Map options)
{
_subjectBeingLoggedOn = subject;
}
...
}
清单 2 显示了 login 方法。此方法的任务很简单,即获取应用程序的 run-as Subject:
如果失败,则将引发 LoginException,指示登录不成功。
如果引发异常,则将不会创建连接。
如果未启用应用程序安全机制,或应用程序没有 run-as 角色,则 WSSubject.getRunAsSubject() 所返回的 run-as Subject 将为空。
如果引发了异常,则将不会调用 commit 方法。
清单 2. LoginModule login
public boolean login() throws LoginException
{
try
{
_runAsSubject = WSSubject.getRunAsSubject();
if (_runAsSubject == null)
{
LoginException loginException = new LoginException ("There was no run-as subject.
Either application security " + "is not enabled, or the calling application
does not have a run-as role configured");
throw loginException;
}
}
catch (WSSecurityException secException)
{
LoginException loginException = new LoginException("An error occurred getting the
run-as subject");
loginException.initCause(secException);
throw loginException;
}
return true;
}
赞助商链接