JBOSS EAP 6 系列五 EJB客户端 —去掉jboss-ejb-client配置文件

摘要

        总要写jboss-ejb-client.properties在客户端中,是不是让产品显得非常不专业?专业的产品一定是要求服务端ip和port能在代码中配置。这一节的主要目的就是解决这个问题。本文主要内容包括,

  • 首先作为预备知识介绍一下JBOSSEAP 6 (JBOSS AS 7)的两种用户类型。
  • 然后进入正题介绍配置了用户的EJB客户端,包括jboss-ejb-client.properties中的配置,和完全甩掉jboss-ejb-client.properties的配置方式。

 

一、JBOSS用户

        这部分本身对JBOSS的配置是很有意义的,因为内容不多就直接放到这里作为预备知识介绍。

        在$JBOSS_HOME/bin下面有一个命令add-user.bat(add-user.sh),运行之后有两种用户类型可选,管理用户和应用型用户,重点介绍应用型用户。

 

1.1 管理用户

        管理用户用于对JBOSS控制台的管理,不再有默认用户可以直接进入web-console去管理jboss。所有的管理员用户都需要从这里配置出来。配置内容如下,

 

你要添加哪个类型?
 a) 管理型用户 (mgmt-users.properties)
 b) 应用型用户(application-users.properties)
(a): a
 
输入要添加的新用户的细节。
使用从现有属性文件发现的区'ManagementRealm'。
用户名: adminleo
密码:
重新输入密码:
你希望这个用户属于哪些组?(请输入一个用逗号隔开的列表,或者留空表示没有)[  ]:
将要添加域'adminleo' 的用户'ManagementRealm'
这是正确的吗?  yes/No? yes
添加用户'adminleo' 至 'E:\server\jboss-eap-6.2\standalone\configuration\mgmt-users.properties'
添加用户'adminleo' 至'E:\server\jboss-eap-6.2\domain\configuration\mgmt-users.properties'
添加属于组adminleo 的用户'' 到文件'E:\server\jboss-eap-6.2\standalone\configuration\mgmt-groups.properties'
添加属于组adminleo 的用户'' 到文件'E:\server\jboss-eap-6.2\domain\configuration\mgmt-groups.properties'
这个新用户将用于AS 进程来连接另外一个AS 进程(如从域控制器)?
 例如,用于连接到主控制器的从主机控制器、用于服务器和服务器间的EJB 调用的远程连接。
yes/no? yes
要表示这个用户,在server-identities 定义<secret value="YWRtaW4xMjNsZW8rKw==" /> 里添加下列内容。
请按任意键继续.. .

配置之后就可以使用用户名密码登陆了,web-console默认登陆端口9990

 

 

1.2 应用型用户

        应用型用户不能管理JBOSS,但是可以使得客户机能够远程调用服务。这可以配置给客户使用。具体配置如下,

 

你要添加哪个类型?
 a) 管理型用户 (mgmt-users.properties)
 b) 应用型用户(application-users.properties)
(a): b
 
输入要添加的新用户的细节。
使用从现有属性文件发现的区'ApplicationRealm'。
用户名: utmleo
密码:
重新输入密码:
你希望这个用户属于哪些组?(请输入一个用逗号隔开的列表,或者留空表示没有)[  ]:
将要添加域'utmleo' 的用户'ApplicationRealm'
这是正确的吗?  yes/No? yes
添加用户'utmleo' 至'E:\server\jboss-eap-6.2\standalone\configuration\application-users.properties'
添加用户'utmleo' 至'E:\server\jboss-eap-6.2\domain\configuration\application-users.properties'
添加属于组utmleo 的用户'' 到文件'E:\server\jboss-eap-6.2\standalone\configuration\application-roles.properties'
添加属于组utmleo 的用户'' 到文件'E:\server\jboss-eap-6.2\domain\configuration\application-roles.properties'
这个新用户将用于AS 进程来连接另外一个AS 进程(如从域控制器)?
 例如,用于连接到主控制器的从主机控制器、用于服务器和服务器间的EJB 调用的远程连接。
yes/no? yes
要表示这个用户,在server-identities 定义<secret value="dXRtMTIzKysr" /> 里添加下列内容。
请按任意键继续.. .


注意到最后这段:

这个新用户将用于AS 进程来连接另外一个AS 进程(如从域控制器)?
 例如,用于连接到主控制器的从主机控制器、用于服务器和服务器间的EJB 调用的远程连接。
yes/no? yes

        选择了yes之后,会获得系统为用户utmleo生成的一个新的秘钥值:dXRtMTIzKysr。下节将详细介绍如何配置有用户名秘钥进客户端。

 

二、EJB客户端扩展

        接上一节,我们配置了用户utmleo,获得秘钥dXRtMTIzKysr。本节分两部分,配置用户名密码进客户端,

  • 独立JAVA客户端
  • JBOSS客户端

 

2.1 独立的JAVA客户端

        如前一篇文章JBOSS EAP 6.1 系列四 EJB客户端--让人又爱又恨的JNDI介绍的,JAVA客户端由两部分组成:

  • jboss-ejb-client.properties
  • 客户端代码

       用户名密码可以单独配置在这两部分之中。


2.1.1 用户名秘钥在配置文件中的配置方式

首先看jboss-ejb-client.properties的配置,增加3个配置项:

remote.connection.default.username=<用户名>

remote.connection.default.password=<秘钥>

remote.connection.default.connect.options.org.xnio.Options.SASL_DISALLOWED_MECHANISMS=<用户类型>

 

        之后可获得如下配置:

remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port=4447
remote.connection.default.username=utmleo
remote.connection.default.password=dXRtMTIzKysr
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
remote.connection.default.connect.options.org.xnio.Options.SASL_DISALLOWED_MECHANISMS=JBOSS-LOCAL-USER

        客户端代码不需要任何修改。

 

2.1.2 用户秘钥在客户端代码中的配置(不再需要配置文件的辅助)

        有用户名秘钥最直接的好处在于可以把jboss-ejb-client.properties文件完全甩开。直接在代码中配置IP和PORT。直接上代码,

packagecom.hp.leo.ejb.client;
 
importjava.util.Properties;
importjavax.naming.Context;
importjavax.naming.InitialContext;
importjavax.naming.NamingException;
importcom.hp.leo.HelloWorld;
 
public classHelloClient {
 
       public static voidmain(String[] args) {
 
              finalProperties env = new Properties();
              env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
              env.put(Context.PROVIDER_URL, "remote://localhost:4447");
              env.put("jboss.naming.client.ejb.context", "true");
              env.put("jboss.naming.client.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT", "false");      
              env.put(Context.SECURITY_PRINCIPAL, "utmleo");
              env.put(Context.SECURITY_CREDENTIALS, "dXRtMTIzKysr");
              try {
                     Contextcontext = new InitialContext(env);
                     HelloWorldh1 = (HelloWorld) context.lookup("HelloWorld/HelloWorldBean!com.hp.leo.HelloWorld");
                     System.out.println(h1.sayHello());
              } catch(NamingException e) {
                     e.printStackTrace();
              }
       }
 
}

        这样就可以完全不用jboss-ejb-client.properties文件了。

 

2.2 JBOSS Server客户端

        JBOSS Server中的JSP或者servlet也想调用其他机器的EJB,但不想再有jboss-ejb-client.properties?这部分就介绍在JBOSS客户端中用户名秘钥的配置,

打开$JBOSS_HOME\standalone\configuration\standalone.xml文件,

 

创建securityrealm

           <security-realm name="ejb-security-realm">
               <server-identities>
                   <secret value="dXRtMTIzKysr"/>
               </server-identities>

 创建remote-outbound-connection

       <outbound-socket-binding name="remote-ejb">
           <remote-destination host="localhost"port="4447"/>
       </outbound-socket-binding>

创建outbound-socket-binding

        

<subsystemxmlns="urn:jboss:domain:remoting:1.1">
            ……
           <outbound-connections>
                <remote-outbound-connectionname="remote-ejb-connection"outbound-socket-binding-ref="remote-ejb"username="utmleo"security-realm="ejb-security-realm">
                   <properties>
                       <property name="SASL_POLICY_NOANONYMOUS"value="false"/>
                       <property name="SSL_ENABLED" value="false"/>
                   </properties>
               </remote-outbound-connection>
           </outbound-connections>
       </subsystem>

 

小结

        本文基于JBOSS Application user的创建,介绍了有用户之后给客户端变成带来的便利,以及在JAVA和JBOSS Server的客户端中用户名秘钥的具体配置。希望能给一直被jboss-ejb-client.properties或者jboss-ejb-client.xml困扰着的朋友一些帮助。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值