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在启动时构建的角色到权限映射)。对于该角色,您可以使用自己的逻辑来确定用户是否确实拥有该角色或组。在回答中,我将此作为使用自定义授权规则可以完成的一个示例来实现。看见