需要安全认证的远程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.
+关注继续查看

一,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

 

目录
相关文章
|
5月前
|
Java 网络架构
SpringBoot 集成cas5.3 通过Restful协议请求认证和退出
前面我们讲解了一些列的CAS文章,对CAS有了很多了解。今天我们讲解一个现在服务常用的REST协议来完成CAS的登录、认证,不需要我们手动登录跳转到CAS的登录页面就可以完成CAS的一些列操作。
513 0
|
11月前
在使用SSH+Spring开发webservice ,报的一些异常及处理方法
在使用SSH+Spring开发webservice ,报的一些异常及处理方法
133 0
在使用SSH+Spring开发webservice ,报的一些异常及处理方法
|
12月前
|
XML Java 数据处理
springMvc项目集成cxf实现webService通信方式的详细步骤
springMvc项目集成cxf实现webService通信方式的详细步骤
springMvc项目集成cxf实现webService通信方式的详细步骤
|
安全 IDE 前端开发
Spring认证指南:了解如何使用 LDAP 保护应用程序
Spring认证指南:了解如何使用 LDAP 保护应用程序
Spring认证指南:了解如何使用 LDAP 保护应用程序
|
IDE 开发工具
将S/4HANA的自定义BO功能以Web Service的方式暴露给第三方
将S/4HANA的自定义BO功能以Web Service的方式暴露给第三方
98 0
将S/4HANA的自定义BO功能以Web Service的方式暴露给第三方
相关产品
云迁移中心
推荐文章
更多