我希望使用符合JSR 196的自定义身份验证模块,在GlassFish 3中,接口javax.security.auth.message.ServerAuth有以下方法:
AuthStatus validateRequest(
MessageInfo messageInfo,
javax.security.auth.Subject clientSubject,
javax.security.auth.Subject serviceSubject
)
AuthStatus可以是像失败或成功这样的几个常量之一。
问题是:如何使用JSR 196从“角色数据库”获取角色?
示例:服务器接收带有SSO令牌(例如CAS令牌)的请求,检查令牌是否有效,使用角色填充远程用户对象,角色通过JDBC从数据库中获取,或通过http从REST服务中获取。
角色取取是否在JSR 196的范围内?如何实现这一目标?
我是否必须使用JSR 196和JSR 115一起使用自定义身份验证和自定义角色源?
发布于 2011-06-24 01:52:38
这是我的JSR-196OpenID实现中的一个代码示例。该方法设置当前CallerPrincipal的字符串数组中存储的角色:
private boolean setCallerPrincipal(String caller, Subject clientSubject) {
boolean rvalue = true;
boolean assignGroups = true;
// create CallerPrincipalCallback
CallerPrincipalCallback cPCB = new CallerPrincipalCallback(
clientSubject, caller);
if (cPCB.getName() == null && cPCB.getPrincipal() == null) {
assignGroups = false;
}
try {
handler.handle((assignGroups ? new Callback[] {
cPCB,
new GroupPrincipalCallback(cPCB.getSubject(),
assignedGroups) } : new Callback[] { cPCB }));
logInfo(DEBUG_JMAC, "jmac.caller_principal:" + cPCB.getName() + " "
+ cPCB.getPrincipal());
} catch (Exception e) {
// should not happen
logger.log(Level.WARNING, "jmac.failed_to_set_caller", e);
rvalue = false;
}
return rvalue;
}
我在validateRequest()方法期间调用此方法。您可以在这里看到完整的代码:http://code.google.com/p/openid4java-jsr196/source/browse/trunk/src/main/java/org/imixs/openid/openid4java/OpenID4JavaAuthModule.java
另外,此页面将有帮助:http://code.google.com/p/openid4java-jsr196/
发布于 2010-03-17 09:58:04
下面是我如何将用户映射到角色的方法:
我的web.xml中有3个角色,我的sun-web.xml中也有3个角色到组的映射,它映射了几个组的角色。然后,我有一个具有表用户的数据库,其中有一个名为"group“的列。该组对应于映射到角色的组。我还使用了基于JSR 196的自定义auth模块和OpenID.因此,基本上,每当用户登录到他们的组时,就从db读取,然后我的应用程序为他们分配相应的角色。所有这些都是使用J2EE的标准声明性安全模型完成的。
对于我的自定义auth模块,我使用了一个名为AuthenticRoast的库,这使得事情变得相当简单。
希望这能有所帮助。
https://stackoverflow.com/questions/2175892
复制相似问题