需要安全认证的远程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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏A周立SpringCloud

使用Feign实现Form表单提交

之前,笔者写了《使用Spring Cloud Feign上传文件》。近日,有同事在对接遗留的Struts古董系统,需要使用Feign实现Form表单提交。其实步...

5096
来自专栏一个会写诗的程序员的博客

13.7 SpringBoot集成日志系统logback的几个问题问题1: Logging system failed to initialize using configuration from

让人感到疑惑的是,SpringBoot居然没有对application.properties配置文件value末端作空格trim处理。

3701
来自专栏Java成神之路

Spring_总结_03_装配Bean(一)之自动装配

(2)当必须要显示配置的时候,再使用类型安全并且比XML更强大的JavaConfig

992
来自专栏菩提树下的杨过

spring-boot 速成(8) 集成druid+mybatis

spring-boot与druid、mybatis集成(包括pageHelper分页插件), 要添加以下几个依赖项: compile('mysql:my...

9239
来自专栏菩提树下的杨过

weblogic 10.x 上开发restful服务

之前已经学习过 利用JAX-RS快速开发RESTful 服务,当时是jboss环境,如果原封不动的迁移到weblogic 10.x 版本,会杯具的发现应用启动失...

22510
来自专栏一个会写诗的程序员的博客

《Springboot极简教程》使用Spring Boot, JPA, Mysql, ThymeLeaf,gradle, Kotlin快速构建一个CRUD Web App

使用Spring Boot, JPA, Mysql, ThymeLeaf,gradle, Kotlin快速构建一个CRUD Web App

1922
来自专栏潇涧技术专栏

Gradle Plugin for Android Development User Guide 2

Gradle Plugin for Android Development User Guide (2)

921
来自专栏用户2442861的专栏

cmake教程4(find_package使用)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/d...

3113
来自专栏Albert陈凯

2018-11-17 面试必问问题TransactionalJava事务之一——Java事务的基本问题

关于加@Transactional注解的方法之间调用,事务是否生效的问题 https://blog.csdn.net/blacktal/article/det...

2392
来自专栏好好学java的技术栈

SpringMVC+RestFul详细示例实战教程一(实现跨域访问+postman测试)

注意:由于文章篇幅太长,超出了字数,这是文章的第一部分,明天分享文章的第二部分,请见谅!

5572

扫码关注云+社区

领取腾讯云代金券