当前位置: 首页 > 知识库问答 >
问题:

使用ejb远程访问和自定义登录模块/applicationrealm的Wildfly设置还称为

阎自怡
2023-03-14

在为EJB远程认证激活自定义登录模块时,还会调用applicationrealm进行身份验证。不幸的是,我不知道为什么。

EJB远程客户端属性:

props.put("java.naming.factory.initial", "org.jboss.naming.remote.client.InitialContextFactory");  
props.put(java.naming.factory.url.pkgs, "org.jboss.ejb.client.naming");  
props.put("jboss.naming.client.ejb.context", false);  
props.put("org.jboss.ejb.client.scoped.context", true);  
props.put("endpoint.name", "client-endpoint");  
props.put("remote.connections", "default");  
props.put("remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED", false);  
props.put("remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS", false);  
props.put("remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT", "false");  

props.put("java.naming.provider.url", "http-remoting://127.0.0.1:8080");  
props.put("remote.connection.default.host", "127.0.0.1");  
props.put("remote.connection.default.port", "8080");  
props.put("remote.connection.default.username", "username");  
props.put("remote.connection.default.password", "password"); 

ejb URL:

ejb:/my-app/MyServiceImpl!com.some.MyServiceInterface  

基于普通standalone.xml的standalone.xml配置(不完整):

<security-realm name="MyRealm">  
        <authentication>  
                    <jaas name="com.some.MyCustomLoginModule"/>  
     </authentication>  
</security-realm>
<security-domain name="MySecurityDomain" cache-type="default">  
        <authentication>  
                <login-module code="com.some.MyCustomLoginModule" flag="required" module="login.my">  
                            <module-option name="usersProperties" value="user.properties"/>  
                            <module-option name="rolesProperties" value="roles.properties"/>  
             </login-module>  
     </authentication>  
</security-domain>
<subsystem xmlns="urn:jboss:domain:remoting:3.0">  
            <endpoint/>  
            <http-connector name="http-remoting-connector" connector-ref="default" security-realm="MyRealm"/>  
</subsystem>
@Stateless  
@SecurityDomain("MySecurityDomain")  
@DeclareRoles("user")  
public class MyServiceImpl implements MyService {  

     private static final Logger logger = Logger.getLogger(MyServiceImpl .class);  

     @Resource  
     private EJBContext ejbContext;  

     @PermitAll  
     public String getPrincipalName() {  
          logger.info("Principal: " + ejbContext.getCallerPrincipal().getName());  
          return ejbContext.getCallerPrincipal().getName();  
     }  
} 

服务接口

@Remote  
public interface MyService {  
     public String getPrincipalName();  
}

自定义登录模块

import java.security.Principal;  
import java.util.Map;  
import javax.security.auth.Subject;  
import javax.security.auth.callback.CallbackHandler;  
import javax.security.auth.login.LoginException;  
import org.jboss.logging.Logger;  
import org.jboss.security.auth.spi.UsersRolesLoginModule;  

public class CustomLoginModule extends UsersRolesLoginModule {  
    private CustomPrincipal principal;  

     private static final Logger logger = Logger.getLogger(CustomLoginModule.class);  

     @Override  
     public void initialize(Subject arg0, CallbackHandler arg1, Map<String, ?> arg2, Map<String, ?> arg3) {  
          logger.info("init module from main class");  
          super.initialize(arg0, arg1, arg2, arg3);  
     }  

     public boolean login() throws LoginException {  
          logger.info("Calling login()");  
          logger.info("User before: " + getUsername());  

          boolean login = super.login();  

          logger.info("User: " + getUsername());  
          logger.info("Password: " + getUsersPassword());  

          if (login) {  
               principal = new CustomPrincipal(getUsername(), "An user description!");  
          }  
          return login;  
     }  

     protected Principal getIdentity() {  
          return principal != null ? principal : super.getIdentity();  
     }  
}  

共有1个答案

梁韬
2023-03-14

我所开发的服务器-客户机产品也完全由后端通过EJB处理登录过程,并在此验证用户名和密码。Wildfly只服务于我们的服务器,我们不使用Wildfly的管理控制台,因此我们不使用Wildfly的application-users

我们简单地设置ApplicationRealm,如下所示:

<security-realm name="MyRealm">
	<authentication>
		<local default-user="$local" allowed-users="*" skip-group-loading="true"/>
	</authentication>
</security-realm>
 类似资料:
  • 我正在尝试开发一个定制的JAAS登录模块,它使用一个令牌并从不同的来源获取用户数据。它应该作为wildfly 8.2.1 final的身份验证领域。我有一个测试servlet,我想在其中进行身份验证,以便检查注入EJB的允许角色。 这个网站的测试:http://www.radcortez.com/custom-principal-and-loginmodule-for-wildfly/事实上,我甚

  • 我目前的问题是,我的机器上运行了两个Wildfly 8.2.0最终实例。我知道,有类似的问题,但没有一个真正有助于我的问题。其中一个拥有一个宁静的应用程序,当它收到GET时,它会触发无状态会话Bean。之后,此无状态会话 Bean 应从远程无状态会话 Bean 调用方法该方法位于另一个 wildfly 实例上。 我将从解释我到目前为止所做的事情开始(也许我错过了一些东西,我对Java EE和Wil

  • 我需要在wildfly 10上运行一个自定义登录(我真的需要一个自定义实现)模块和客户端证书验证,但该模块本身从未执行。同样的方法也适用于jboss 6。 我的自定义模块: 网状物xml jboss网站。xml 在standalone.xml,包括ssl证书配置: 此外,我的自定义安全域是独立的。xml 甚至更改了默认的安全域 最后,https侦听器 一切似乎都可以,如上所示,但当我试图执行简单的

  • 我在prestashop中创建了一个自定义模块,但我不知道如何处理对该模块的访问。我没有找到任何关于它的文档。我知道怎么在symfony做,但在prestashop不行。我只想让一组用户访问我的模块。有人知道怎么做吗,或者有一个文档链接来帮助我?

  • JBoss Wildfly 8.0.0-最终 JSF 2.2.4 首先,我创建登录使用application-users.properties和application-roles.properties.添加用户add-user.bat 网状物xml 独立的。xml 登录。xhtml 所以这很有效。。现在我想使用数据库身份验证。。因此,我改变了独立。xml。 我使用此sql在数据库中插入角色和用户(

  • 我一直在尝试通过spring security验证我的服务。为此,我使用过滤器作为 这是我一直在使用的安全配置:在此配置中,我通过身份验证过滤所有请求并允许所有请求。对于身份验证,我有登录页面。在登录表单中,我分别使用“用户名”表示电子邮件和“密码”表示属性名称的密码。 这是我的程序结构 为了实现UserDEtailService,我做了以下工作 这是我覆盖的UserDetailsService,