gpt4 book ai didi

java - 是否可以按需确定用户的组成员身份而不是在 ServerAuthModule (JASPIC) 中登录时

转载 作者:搜寻专家 更新时间:2023-10-31 20:01:59 24 4
gpt4 key购买 nike

我正在尝试编写自己的 ServerAuthModule,以使用自定义登录系统。

如果我理解的一切都是正确的,那么容器会为每个传入请求调用 validateRequest 方法,并且我的 SAM 将检查凭据,并告诉容器用户的用户名和组(如果凭据正确的话) ) 通过 CallbackHandler。

public class MySAM implements ServerAuthModule {

@Override
public AuthStatus validateRequest(MessageInfo messageInfo, Subject clientSubject, Subject serviceSubject) throws AuthException {

// check user credentials
...

// set username and groups
CallerPrincipalCallback cpCallback = new CallerPrincipalCallback(clientSubject, username);
GroupPrincipalCallback gpCallback = new GroupPrincipalCallback(clientSubject, groups);
callbackHandler.handle(new Callback[]{cpCallback, gpCallback}

return AuthStatus.SUCCESS;
}

...
}

我现在的问题是,当用户登录时,我不知道该用户属于哪个组。我只能检查用户是否在给定的组中。是否有可能以某种方式为容器提供一种方法来检查用户是否在给定的组中,而不是在 validateRequest 方法中为其提供一个包含组的数组?

boolean isInGroup(String username, String group) {
// ask backend system
}

最佳答案

你所做的看起来确实是正确的。

在 JASPIC 中没有将容器传递给您想要的方法的概念。容器根据您提供的组数组创建一组 Principals,那里没有方法空间。

在 Java EE 中,JACC 应该可以做到这一点。每次需要回答 isUserInRole 问题以及每次需要确定用户是否具有某些权限(例如允许访问/adminpanel)时,都会咨询 JACC 策略提供者。

此时您可以进行一种反向检查以查看给定权限需要什么角色(使用 JACC 在启动时构建的权限映射的角色)。有了该角色,您就可以使用自己的逻辑来确定用户是否确实拥有该角色或组。

关于java - 是否可以按需确定用户的组成员身份而不是在 ServerAuthModule (JASPIC) 中登录时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27341665/

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