需要安全认证的远程EJB调用示例(Jboss EAP 6.2环境)
一,Remote EJB
服务接口定义:
package yjmyzz.ejb.server.helloworld;
public interface HelloWorldService {
public String sayHello(String name);
}
实现:
package yjmyzz.ejb.server.helloworld; import javax.annotation.security.RolesAllowed;
import javax.ejb.Remote;
import javax.ejb.Stateless; @Stateless
@Remote(HelloWorldService.class)
@RolesAllowed({ "guest" })
public class HelloWorldBean implements HelloWorldService { public String sayHello(String name) {
return "hello , " + name + " , welcome to EJB's world!";
} }
注意: @RoleAllowed({"guest"}) 该注解表示只有guest这个角色的用户才能调用HelloWorldBean
对应maven的pom.xml内容如下:
<?xml version="1.0"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>yjmyzz</groupId>
<artifactId>ejb-server-helloworld</artifactId>
<version>1.0</version>
<packaging>ejb</packaging> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<version.jboss.maven.plugin>7.4.Final</version.jboss.maven.plugin>
<version.jboss.spec.javaee.6.0>3.0.2.Final</version.jboss.spec.javaee.6.0>
<version.ejb.plugin>2.3</version.ejb.plugin>
<maven.compiler.target>1.6</maven.compiler.target>
<maven.compiler.source>1.6</maven.compiler.source>
</properties> <dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.spec</groupId>
<artifactId>jboss-javaee-6.0</artifactId>
<version>${version.jboss.spec.javaee.6.0}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement> <dependencies> <dependency>
<groupId>org.jboss.spec.javax.annotation</groupId>
<artifactId>jboss-annotations-api_1.1_spec</artifactId>
<scope>provided</scope>
</dependency> <dependency>
<groupId>org.jboss.spec.javax.ejb</groupId>
<artifactId>jboss-ejb-api_3.1_spec</artifactId>
<scope>provided</scope>
</dependency> </dependencies> <build> <finalName>${project.artifactId}</finalName>
<plugins> <plugin>
<groupId>org.jboss.as.plugins</groupId>
<artifactId>jboss-as-maven-plugin</artifactId>
<version>${version.jboss.maven.plugin}</version>
<configuration>
<filename>${project.build.finalName}.jar</filename>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<version>${version.ejb.plugin}</version>
<configuration>
<ejbVersion>3.1</ejbVersion>
<generateClient>true</generateClient>
</configuration>
</plugin> </plugins>
</build> </project>
二,EJB Client
package yjmyzz.ejb.client.helloworld; import java.util.Hashtable; import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException; import yjmyzz.ejb.server.helloworld.HelloWorldService; public class EjbClientApp {
public static void main(String[] args) throws NamingException {
System.out.println(lookupRemoteBean().sayHello("jimmy"));
} @SuppressWarnings("unchecked")
private static HelloWorldService lookupRemoteBean() throws NamingException {
@SuppressWarnings("rawtypes")
final Hashtable jndiProperties = new Hashtable();
jndiProperties.put(Context.URL_PKG_PREFIXES,
"org.jboss.ejb.client.naming");
final Context context = new InitialContext(jndiProperties);
return (HelloWorldService) context
.lookup("ejb:/ejb-server-helloworld/HelloWorldBean!"
+ HelloWorldService.class.getName());
}
}
注: lookupRemoteBean用于查找远程EJB.
jboss环境中,需要在classpath路径下放置jboss-ejb-client.properties文件,内容参考下面:
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.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
remote.connection.default.username=msgUser
remote.connection.default.password=Password1!
注: msgUser为jboss中创建的一个application user,而且属于guest组(不熟悉jboss下创建用户的朋友,可参考JMS + jboss EAP 6.2 示例 中的相关内容)
对应maven项目的pom.xml为:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>yjmyzz</groupId>
<artifactId>ejb-client-helloworld</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>ejb-client-helloworld</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<dependency>
<groupId>yjmyzz</groupId>
<artifactId>ejb-server-helloworld</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.transaction</groupId>
<artifactId>jboss-transaction-api_1.1_spec</artifactId>
<version>1.0.1.Final-redhat-2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.ejb</groupId>
<artifactId>jboss-ejb-api_3.1_spec</artifactId>
<version>1.0.2.Final-redhat-2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.jboss</groupId>
<artifactId>jboss-ejb-client</artifactId>
<version>1.0.21.Final-redhat-1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.jboss.xnio</groupId>
<artifactId>xnio-nio</artifactId>
<version>3.0.7.GA-redhat-1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.jboss.sasl</groupId>
<artifactId>jboss-sasl</artifactId>
<version>1.0.3.Final-redhat-1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.jboss.marshalling</groupId>
<artifactId>jboss-marshalling-river</artifactId>
<version>1.3.16.GA-redhat-1</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</project>
示例源码: remote-ejb-with-security-sample.zip
需要安全认证的远程EJB调用示例(Jboss EAP 6.2环境)的更多相关文章
- JBOSS EAP 6 系列四 EJB实现——调用(贯穿始终的模块)
本文主要介绍在JBOSS EAP 6.2(或者JBOSS AS7)中模块是如何贯穿EJB实现的始终.延续上一博文<认识模块的使用>的话题继续聊JBOSS做为模块申明式容器的这一特性在EJB ...
- Jboss EAP 6 EJB调用常见问题
1. 调用EJB的三种方法 调用EAP 6 EJB的第一种方法,使用JBoss API,如下: Properties p = new Properties(); p.put("remote. ...
- JMS + jboss EAP 6.2 示例
.Net中如果需要消息队列功能,可以很方便的使用微软自带的MSMQ,对应到Java中,这个功能就是JMS(Java Message Service). 下面以Jboss EAP 6.2环境,介绍一下基 ...
- SpringBoot里使用RMI进行远程方法调用
一.Java RMI定义 Java RMI:Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程 ...
- Java APi 之 RMI远程方法调用
一.什么是RPC RPC全称是remote procedure call,即远程过程调用.它是一种协议,用于从远程计算机上请求服务. 例如有两台服务器A和B,A上的应用想要调用B上应用的方法,但是他们 ...
- BeetleX之XRPC远程委托调用
BeetleX.XRPC是基于接口的远程通讯组件,它不紧可以把接口提供客户端调用,同样也支持服务端创建客户端的接口实例并主动调用客户端的方法.接口有着非常的规范性和约束性,但前提你是必须制定相应的接口 ...
- 股票数据调用示例代码php
<!--?php // +---------------------------------------------------------------------- // | JuhePHP ...
- Thrift架构~从图中理解thrift,它事实上是一种远程过程调用
thrift为我们简化了tcp通讯,它可以使用我们方便的建立各种语言的服务端与客户端,并实现客户端对服务器的远程过程调用,简单的说就是服务器通过thrift架构对外开放一些接口,并自己实现这些接口,如 ...
- XML-RPC远程方法调用
一.简介 XML-RPC的全称是XML Remote Procedure Call,即XML远程方法调用. 它是一套允许运行在不同操作系统.不同环境的程序实现基于Internet过程调用的规范和一系列 ...
随机推荐
- 1.8 基础知识——GP2.7 识别和卷入干系人(Stakeholder) & GP2.9 质量保证(QA)
GP2.7 识别和卷入干系人(Stakeholder) GP2.7 Identify and involve the relevant stakeholders of XXX process as p ...
- asp.net MD5 加密
//Md5摘要 string resultMD5 = FormsAuthentication.HashPasswordForStoringInConfigFile("要加密的内容" ...
- Java基础知识学习(二)
Java语法基础 数据类型.类型转换.运算符.逻辑运算符.参考C#,基本一致 输入输出 输出 System.out.print("abc"); System.out.printf( ...
- 持续集成(CI)初探
前不久接触了持续集成(Continuous Integration,CI). 一.持续集成是什么 首先说说“集成”的概念.在实际的软件开发中,常常会发生两种情境: 1.几个项目组对同一个系统的不同功能 ...
- T-SQL—理解CTEs
在推出SQLServer2005之后,微软定义了一个新的查询架构叫做公共表表达式--CTE.CTE是一个基于简单查询的临时结果集,在一个简单的插入.更新.删除或者select语句的执行范围内使用.再本 ...
- 烂泥:使用nginx利用虚拟主机搭建WordPress博客
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 最近开始打算学习nginx web服务器,既然是学习还是以实用为目的的.我们在此以搭建WordPress博客为例. 搭建WordPress博客,我们需要 ...
- Spring-data-jpa详解,全方位介绍。
本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求.这里不讲解JPA和Spring-data-jpa单独使用,所有的内容都是在和Spring ...
- 报表引擎API开发入门— EJB程序数据源
我们前面讲了几个数据源,今天我们来讲一下EJB数据源,这篇讲完我们数据源这部分就讲完了.数据连接不需要直接访问数据库,而是使用EJB做为数据源.FR通过定义程序数据集使用EJB的相关类获取到EJB数据 ...
- MMORPG大型游戏设计与开发(客户端架构 part1 of vegine)
重写有些核心接口的时候,其实遇到了许多的问题,甚至一度的想过要放弃,但是最终还是坚持了下来.在客户端提供的这些接口中,可以清晰的看到客户端所依赖的各种模块的支持,以及各自之间的一些关联.下面只是介绍了 ...
- Java方法区和运行时常量池溢出问题分析
运行时常量池是方法区的一部分,方法区用于存放Class的相关信息,如类名.访问修饰符.常量池.字段描述.方法描述等. String.intern()是一个native方法,它的作用是:如果字符串常量池 ...