Jakarta ee &引用;“禁止”;在Wildfly的自定义登录模块中

Jakarta ee &引用;“禁止”;在Wildfly的自定义登录模块中,jakarta-ee,jboss,wildfly,wildfly-8,jaas,Jakarta Ee,Jboss,Wildfly,Wildfly 8,Jaas,我已经配置了自定义登录模块 在realm ApplicationRealm的组“guest”中添加了应用程序用户“jmsuser”。但我仍然在结果页面中被“禁止” Standalone-full.xml <default-security-domain value="MyLoginModule"/> <security-domain name="MyLoginModule" cache-type="default"> <aut

我已经配置了自定义登录模块

在realm ApplicationRealm的组“guest”中添加了应用程序用户“jmsuser”。但我仍然在结果页面中被“禁止”

Standalone-full.xml

<default-security-domain value="MyLoginModule"/>
<security-domain name="MyLoginModule" cache-type="default">
                    <authentication>
                        <login-module code="com.auth.MyLoginModule" flag="required"/>
                    </authentication>
</security-domain>
Audit.log

11:17:51,560 TRACE [org.jboss.security] (default task-2) PBOX000224: End getAppConfigurationEntry(MyLoginModule), AuthInfo: AppConfigurationEntry[]:
[0]
LoginModule Class: com.auth.MyLoginModule
ControlFlag: LoginModuleControlFlag: required
Options:

11:19:16,232 TRACE [org.jboss.security] (default task-2) PBOX000210: defaultLogin, login context: javax.security.auth.login.LoginContext@8ba05ec, subject: Subject(1075984995).principals=com.auth.MyLoginModulePrincipal@1936852516(MyLoginModulePrincipal:  jmsuser)
11:19:18,863 TRACE [org.jboss.security] (default task-2) PBOX000207: updateCache, input subject: Subject(1075984995).principals=com.auth.MyLoginModulePrincipal@1936852516(MyLoginModulePrincipal:  jmsuser), cached subject: Subject(689516194).principals=com.auth.MyLoginModulePrincipal@1936852516(MyLoginModulePrincipal:  jmsuser)
11:19:18,865 TRACE [org.jboss.security] (default task-2) PBOX000208: Inserted cache info: org.jboss.security.authentication.JBossCachedAuthenticationManager$DomainInfo@6a06d399
11:19:18,866 TRACE [org.jboss.security] (default task-2) PBOX000201: End isValid, result = true
11:19:18,879 TRACE [org.jboss.security] (default task-2) PBOX000354: Setting security roles ThreadLocal: null
更新:
我在subject中添加了主体和角色,但仍然被禁止。PFB更新了MyLoginModule类

 private Principal userPrincipal;
 private RolePrincipal rolePrincipal;
 private List<String> userGroups;
...
public login(){
//returns true;
}

@Override
    public boolean commit() throws LoginException {

        if (!isAuthenticated) {
            return false;
        } else {

            userPrincipal = new Principal(username);
            subject.getPrincipals().add(userPrincipal);

            if (userGroups != null && userGroups.size() > 0) {
                for (String groupName : userGroups) {
                    rolePrincipal = new RolePrincipal(groupName);
                    subject.getPrincipals().add(rolePrincipal);
                }
            }

            commitSucceeded = true;

            return true;
        }
    }
      private List<String> getRoles() {

        List<String> roleList = new ArrayList<>();
        roleList.add("guest");

        return roleList;
    }
私有主体用户主体;
私人角色主要角色主要角色主要角色;
私有列表用户组;
...
公共登录(){
//返回true;
}
@凌驾
public boolean commit()引发LoginException{
如果(!已验证){
返回false;
}否则{
userPrincipal=新主体(用户名);
subject.getPrincipals().add(userPrincipal);
if(userGroups!=null&&userGroups.size()>0){
for(字符串groupName:userGroups){
rolePrincipal=新的rolePrincipal(组名);
subject.getPrincipals().add(rolePrincipal);
}
}
CommitSucceed=真;
返回true;
}
}
私有列表getRoles(){
List roleList=new ArrayList();
角色列表。添加(“来宾”);
返回角色扮演者;
}

如果您只想使用
ApplicationRealm
及其属性文件中定义的用户/角色,则只需从部署中删除
jboss web.xml
。它将自动使用
other
安全域(默认域)-该域使用
ApplicationRealm
作为用户存储库


如果您想在新的安全域中使用自己的登录模块,则无需触摸
ApplicationRealm

您需要在自定义登录模块中执行以下操作:

  • 对用户进行身份验证(向主题添加具有用户名的主体)

  • 将一些角色添加到主题中的
    角色

  • 如果使用用户名/密码身份验证,那么最简单的方法是扩展抽象的PicketBox类
    org.jboss.security.auth.spi.UsernamePasswordLoginModule


    查看了解如何为JBoss应用程序服务器实现自定义登录模块的详细信息。

    您的模块直接或间接扩展了
    AbstractServerLoginModule

    • 如果是,您需要设置
      loginOk=true
    • 如果没有,提交也需要返回true

    我已经在subject中添加了主体和角色,但仍然被禁止。请检查我更新的问题。如果您不想扩展JBoss(PicketBox)登录模块类之一,请至少查看
    AbstractServerLoginModule
    类以了解如何将角色正确添加到subject中-提交返回true。该类正在实现LoginModule
    public boolean login() throws LoginException
        {
    //returns true;
    }
    
    11:17:51,560 TRACE [org.jboss.security] (default task-2) PBOX000224: End getAppConfigurationEntry(MyLoginModule), AuthInfo: AppConfigurationEntry[]:
    [0]
    LoginModule Class: com.auth.MyLoginModule
    ControlFlag: LoginModuleControlFlag: required
    Options:
    
    11:19:16,232 TRACE [org.jboss.security] (default task-2) PBOX000210: defaultLogin, login context: javax.security.auth.login.LoginContext@8ba05ec, subject: Subject(1075984995).principals=com.auth.MyLoginModulePrincipal@1936852516(MyLoginModulePrincipal:  jmsuser)
    11:19:18,863 TRACE [org.jboss.security] (default task-2) PBOX000207: updateCache, input subject: Subject(1075984995).principals=com.auth.MyLoginModulePrincipal@1936852516(MyLoginModulePrincipal:  jmsuser), cached subject: Subject(689516194).principals=com.auth.MyLoginModulePrincipal@1936852516(MyLoginModulePrincipal:  jmsuser)
    11:19:18,865 TRACE [org.jboss.security] (default task-2) PBOX000208: Inserted cache info: org.jboss.security.authentication.JBossCachedAuthenticationManager$DomainInfo@6a06d399
    11:19:18,866 TRACE [org.jboss.security] (default task-2) PBOX000201: End isValid, result = true
    11:19:18,879 TRACE [org.jboss.security] (default task-2) PBOX000354: Setting security roles ThreadLocal: null
    
     private Principal userPrincipal;
     private RolePrincipal rolePrincipal;
     private List<String> userGroups;
    ...
    public login(){
    //returns true;
    }
    
    @Override
        public boolean commit() throws LoginException {
    
            if (!isAuthenticated) {
                return false;
            } else {
    
                userPrincipal = new Principal(username);
                subject.getPrincipals().add(userPrincipal);
    
                if (userGroups != null && userGroups.size() > 0) {
                    for (String groupName : userGroups) {
                        rolePrincipal = new RolePrincipal(groupName);
                        subject.getPrincipals().add(rolePrincipal);
                    }
                }
    
                commitSucceeded = true;
    
                return true;
            }
        }
          private List<String> getRoles() {
    
            List<String> roleList = new ArrayList<>();
            roleList.add("guest");
    
            return roleList;
        }