总要写jboss-ejb-client.properties在客户端中,是不是让产品显得非常不专业?专业的产品一定是要求服务端ip和port能在代码中配置。这一节的主要目的就是解决这个问题。本文主要内容包括,
这部分本身对JBOSS的配置是很有意义的,因为内容不多就直接放到这里作为预备知识介绍。
在$JBOSS_HOME/bin下面有一个命令add-user.bat(add-user.sh),运行之后有两种用户类型可选,管理用户和应用型用户,重点介绍应用型用户。
管理用户用于对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==" /> 里添加下列内容。 请按任意键继续.. .
应用型用户不能管理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。下节将详细介绍如何配置有用户名秘钥进客户端。
接上一节,我们配置了用户utmleo,获得秘钥dXRtMTIzKysr。本节分两部分,配置用户名密码进客户端,
如前一篇文章《JBOSS EAP 6.1 系列四 EJB客户端--让人又爱又恨的JNDI》介绍的,JAVA客户端由两部分组成:
用户名密码可以单独配置在这两部分之中。
首先看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
客户端代码不需要任何修改。
有用户名秘钥最直接的好处在于可以把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 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>
<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困扰着的朋友一些帮助。