gpt4 book ai didi

java - 如何在 GlassFish 中获取具有 JSR 196 身份验证的角色?

转载 作者:行者123 更新时间:2023-11-30 12:00:09 30 4
gpt4 key购买 nike

我想使用符合 JSR 196 的自定义身份验证模块在 GlassFish 3 中。接口(interface) javax.security.auth.message.ServerAuth 具有以下方法:

AuthStatus validateRequest(
MessageInfo messageInfo,
javax.security.auth.Subject clientSubject,
javax.security.auth.Subject serviceSubject
)

AuthStatus 可以是 FAILURE 或 SUCCESS 等常量之一。

问题是:如何使用 JSR 196 从“角色数据库”中获取角色?

示例:服务器接收带有 SSO token (例如 CAS token )的请求,检查 token 是否有效,使用通过 JDBC 从数据库或通过 http 从 REST 服务获取的角色填充远程用户对象。

角色获取是否在 JSR 196 的范围内?如何实现?

我必须将 JSR 196 与 JSR 115 一起使用吗?使用自定义身份验证和自定义角色源?

最佳答案

这是我的 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/

关于java - 如何在 GlassFish 中获取具有 JSR 196 身份验证的角色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2175892/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com