需要安全认证的远程EJB调用示例(Jboss EAP 6.2环境)

一,Remote EJB

服务接口定义:

1 package yjmyzz.ejb.server.helloworld;
2
3 public interface HelloWorldService {
4
5     public String sayHello(String name);
6
7 }

实现:

 1 package yjmyzz.ejb.server.helloworld;
 2
 3 import javax.annotation.security.RolesAllowed;
 4 import javax.ejb.Remote;
 5 import javax.ejb.Stateless;
 6
 7 @Stateless
 8 @Remote(HelloWorldService.class)
 9 @RolesAllowed({ "guest" })
10 public class HelloWorldBean implements HelloWorldService {
11
12     public String sayHello(String name) {
13         return "hello , " + name + " , welcome to EJB's world!";
14     }
15
16 }

注意: @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

 1 package yjmyzz.ejb.client.helloworld;
 2
 3 import java.util.Hashtable;
 4
 5 import javax.naming.Context;
 6 import javax.naming.InitialContext;
 7 import javax.naming.NamingException;
 8
 9 import yjmyzz.ejb.server.helloworld.HelloWorldService;
10
11
12 public class EjbClientApp {
13     public static void main(String[] args) throws NamingException {
14         System.out.println(lookupRemoteBean().sayHello("jimmy"));
15     }
16
17     @SuppressWarnings("unchecked")
18     private static HelloWorldService lookupRemoteBean() throws NamingException {
19         @SuppressWarnings("rawtypes")
20         final Hashtable jndiProperties = new Hashtable();
21         jndiProperties.put(Context.URL_PKG_PREFIXES,
22                 "org.jboss.ejb.client.naming");
23         final Context context = new InitialContext(jndiProperties);
24         return (HelloWorldService) context
25                 .lookup("ejb:/ejb-server-helloworld/HelloWorldBean!"
26                         + HelloWorldService.class.getName());
27     }
28 }

 注: lookupRemoteBean用于查找远程EJB.

jboss环境中,需要在classpath路径下放置jboss-ejb-client.properties文件,内容参考下面:

1 remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
2 remote.connections=default
3 remote.connection.default.host=localhost
4 remote.connection.default.port = 4447
5 remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
6 remote.connection.default.username=msgUser
7 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

 

时间: 2024-10-01 08:31:53

需要安全认证的远程EJB调用示例(Jboss EAP 6.2环境)的相关文章

javaee-两个GlassFish4.0服务器之间的远程EJB调用

问题描述 两个GlassFish4.0服务器之间的远程EJB调用 两台服务器在不同的机器上,环境为jdk8,javaee7. 当我在一台服务器A上调用服务器B的时候,如果在普通的java main方法中调用 : InitialContext ctx = new InitialContext(); ctx.lookup("corbaname:iiop:192.168.0.210:3700#java:global/RemoteEjb/SayHelloService!rm.SayHelloServic

Android AIDL和远程Service调用示例代码_Android

Android:AIDL和远程Service调用 本讲的内容,理解起来很难,也许你看了很多资料也看不明白,但是用起来缺简单的要命.所以我们干脆拿一个音乐播放器中进度条的实例来说明一下AIDL和Remote Service的价值和使用方法,你把这个例子跑一边,体会一下就OK了.下面的例子是我 正在准备的项目实例中的一部分. 首先说明一下我们面临的问题,如果看不懂下面的描述请看前面的课程: 第一.我们知道在AndroId中如果需要进行音乐播放,最方面的方法就是使用自带的MediaPlayer对象,如

Android AIDL和远程Service调用示例代码

Android:AIDL和远程Service调用 本讲的内容,理解起来很难,也许你看了很多资料也看不明白,但是用起来缺简单的要命.所以我们干脆拿一个音乐播放器中进度条的实例来说明一下AIDL和Remote Service的价值和使用方法,你把这个例子跑一边,体会一下就OK了.下面的例子是我 正在准备的项目实例中的一部分. 首先说明一下我们面临的问题,如果看不懂下面的描述请看前面的课程: 第一.我们知道在AndroId中如果需要进行音乐播放,最方面的方法就是使用自带的MediaPlayer对象,如

JMS + jboss EAP 6.2 示例

.Net中如果需要消息队列功能,可以很方便的使用微软自带的MSMQ,对应到Java中,这个功能就是JMS(Java Message Service). 下面以Jboss EAP 6.2环境,介绍一下基本的用法: JMS有二种基本的使用模式, 一种是点对点模式(即"一条"消息只能从"一个"发送方传输到"一个"接收方) - 这种模式下,发送方.接收方不必同时在线,消息在未取回走,一直存放在队列中. 另一种是发布/订阅模式,即一条消息(该模式下,称为&

ejb中什么是远程客户端调用,什么是本地客户端调用

问题描述 刚刚接触ejb,看了尚学堂的视频,里面介绍远程客户端调用.本地客户端调用.其中,远程客户端他就用了一个javaproject来调用ejb类,而本地客户端则是用一个webproject(包括jsp页面)来调用ejb类.那么ejb中什么是远程客户端调用,什么是本地客户端调用.希望各位最好举例说明,这方面我刚刚接触,比较弱.谢谢. 解决方案 解决方案二:远程调用就是A主机里的web应用程序调用B主机里的EJB,本地调用就是A主机调的Web应用调用本机(即A主机)里的EJB我以代码举个例子:i

从Java编写的Batch程序如何调用远程EJB

问题描述 应用服务器是Weblogic俺已经通过t3://hostname:7001取道了EJB实例,但不知道如何调用远程EJB方法.

robbin写的EJB调用的原理分析

一个远程对象至少要包括4个class文件:远程对象:远程对象的接口:实现远程接口的对象的stub:对象的skeleton这4个class文件. 在EJB中则至少要包括10个class: Bean类,特定App Server的Bean实现类 Bean的remote接口,特定App Server的remote接口实现类,特定App Server的remote接口的实现类的stub类和skeleton类 Bean的home接口,特定App Server的home接口实现类,特定App Server的h

ASP远程脚本调用

远程脚本调用技术(Remote Scripting)的最大特点是:客户端脚本调用服务器脚本时无需刷新整个页面.一般情况下,Web页面需要与服务器交互时必须提交表单数据,刷新整个页面.这不仅不利于改善浏览效果,也不利于提高服务器效率.利用远程脚本调用技术(Remote Scripting),客户端脚本可以像调用本地函数一样调用远程脚本函数,从而极大地方便了交互式Web应用的开发.使得那些基于浏览器的应用更接近于传统的Win32应用.在复杂的表单验证和频繁的数据库操作中,应用远程脚本调用技术的优点是

用RMI进行远程方法调用

远程方法调用(RMI)机制可以把面向对象的思想进一步扩展,因为你可以调用的对象不仅可以在本机上,也可以在别的主机上.本文就简单介绍rmi的编程方法. 首先介绍一些简单的rmi的概念. 1,服务器和客户:在rmi中,如果有一个对象进行远程方法调用,这个对象就叫做客户机对象,而远程对象则被称为服务器对象. 2,创建服务器对象的服务器程序:这个程序用来创建服务器对象,注册这个对象,使得客户可以通过注册的名称访问服务器对象. 3,接口(interface),接口可以让客户端了解服务器所能做的工作.更具体