Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以按需而不是在登录ServerAuthModule(JASPIC)时确定用户的组成员身份_Java_Jakarta Ee_Jaspic - Fatal编程技术网

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

Java 是否可以按需而不是在登录ServerAuthModule(JASPIC)时确定用户的组成员身份,java,jakarta-ee,jaspic,Java,Jakarta Ee,Jaspic,我正在尝试编写自己的ServerAuthModule,以使用自定义登录系统 如果我理解正确,那么会发生的事情是容器为每个传入请求调用validateRequest方法,我的SAM将检查凭据,并通过CallbackHandler告诉容器用户的用户名和组(如果凭据正确) public class MySAM implements ServerAuthModule { @Override public AuthStatus validateRequest(MessageInfo me

我正在尝试编写自己的
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中没有像您所希望的那样向容器传递方法的概念。容器从您提供给它的组数组中创建一组主体,并且没有空间容纳方法

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


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

在回答中,我将此作为使用自定义授权规则可以完成的一个示例来实现。看见