标签: jax-rs

Glassfish摘要认证

我想使用JAX-RS构建RESTful Web服务(Jersey + Jackson,Jackson用于生成JSON).

我使用Glassfish 4.0作为服务器,netbeans作为IDE.

Web服务工作正常,但目前我没有任何身份验证.

所以现在我正在考虑散列密码的摘要验证,这样你就不需要以纯文本形式传输密码了.另外我想使用https,以便加密数据.

我理解了理论.但我不知道我怎么能用Glassfish在Netbeans中做到这一点.

我看到一些教程在glassfish的管理控制台中做了一些事情.但是,有没有办法在netbeans中做到这一点?我不能在部署应用程序时创建的netbeans中定义一个领域吗?

创建领域和东西之后.我想我需要在我的所有资源(WebServices)中注入某种经过身份验证的"用户"-Object.但我以前从未这样做过.我正在寻找一个很好的教程,它描述了我如何设置摘要认证,注入网络netbeans可以用netbeans做到这一点,这样我就能很好地理解它.

glassfish jax-rs java-ee-6 java-ee-7 jersey-2.0

0
推荐指数
1
解决办法
1237
查看次数

Jboss EAP 6.1中的RestEasy冲突

我正在尝试使用Jersey来创建RESTful API.我的pom.xml看起来像:

<!-- Jersey Library -->
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-server</artifactId>
            <version>1.18</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-bundle</artifactId>
            <version>1.18</version>
        </dependency>
        <dependency>
            <groupId>asm</groupId>
            <artifactId>asm</artifactId>
            <version>3.3.1</version>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

但是Only one JAX-RS Application Class allowed.在Jboss中部署应用程序时我遇到了 异常.但是,这在tomcat的情况下非常有效.

堆栈跟踪:

ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC000001: Failed to start service jboss.deployment.unit."apiinterface.war".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.unit."apiinterface.war".POST_MODULE: JBAS018733: Failed to process phase POST_MODULE of deployment "apiinterface.war"
        at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:127) [jboss-as-server-7.2.0.Final-redhat-4.jar:7.2.0.Final-redhat-4]
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.4.GA-redhat-1.jar:1.0.4.GA-redhat-1]
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.4.GA-redhat-1.jar:1.0.4.GA-redhat-1]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_45]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_45]
        at java.lang.Thread.run(Thread.java:744) [rt.jar:1.7.0_45]
Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: JBAS011232: Only one …
Run Code Online (Sandbox Code Playgroud)

java jboss jax-rs jersey resteasy

0
推荐指数
1
解决办法
4282
查看次数

REST - PUT(更新)资源状态

我已经考虑了一段时间,但无法将其环绕在我的脑海中。假设我有一个通过 REST 公开的任务系统。任务有自己的生命周期,例如:

CREATED -> ACTIVE   ->  PROCESSING -> CLOSED
   |          |               |
   |          |-->ESCALATED-->|
   |
    --> DISMISSED
Run Code Online (Sandbox Code Playgroud)

现在使用POST我通过提供正文有效负载中的所有信息来创建任务。

但现在我只需要更改任务的状态,也许添加评论。所以从理论上讲,PUT是要走的路——它正在更新资源。但事情是这样的:

PUT: /tasks/{taskId}?action=activate 似乎是合法的 URI,但是该操作已经有一个请求参数,可用于更改资源的状态 - PUT负载怎么样?对于这个端点的用户发送 0 长度消息的请求是否直观?

更新:

也很抱歉我的英语不好。我的意思是 -使用 URI 参数通过PUT请求更改资源状态,而不使用 BODY (Content-Lenght:0) 因此 URI: /tasks/32/ ?action=CLOSED更改“Task " 状态从PROCESSINGCLOSED

如果这是一个不好的做法 - 什么方法被认为是更好的做法?

rest design-patterns jax-rs

0
推荐指数
1
解决办法
1048
查看次数

JPA为每个请求创建实体管理器工厂?

首先,我是JPA和Jax-rs的新手,我正在努力开发一项休息服务.所以我创建了一个资源类并对其进行了注释.

@Path("/companies")
public class CompanyResource {

private EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("test");

@GET
@Produces({MediaType.APPLICATION_JSON})
public List<Company> getCompanies() {
    EntityManager entityManager = entityManagerFactory.createEntityManager();

    return new ArrayList<>();
}

@GET
@Path("{companyId}")
@Produces({MediaType.APPLICATION_JSON})
public Company getCompany(@PathParam("companyId") int id) {

    return new Company();
}
}
Run Code Online (Sandbox Code Playgroud)

从我对每个客户端请求实例的jax-rs的理解CompanyResource,这意味着每次EntityManagerFactory创建新的,我想这不是一个好主意,因为我只需要它来创建实体管理器,这可能是仅使用它的一个实例完成.那么实现这个目标的正确方法是什么?或者可以为每个请求创建此工厂的新实例吗?

PS我已经看到一些例子,他们使用@Stateless注释并注入实体管理器,但我猜他们EJB在那里使用(我可能是错的),我现在不想深入EJB.

java jpa jax-rs

0
推荐指数
1
解决办法
852
查看次数

我们是否应始终使用异步JAX-RS资源用于移动后端?

我正在使用Java EE - JAX-RS 2.0技术构建Mobile后端API.

由于大多数移动客户端消耗都是异步http调用

所以我的问题是: 我应该为所有JAX-RS资源使用异步功能吗?原因如果不是?

以下是模板Mobile Async API

@Path("/async_api")
public class AsyncResource {

    @GET
    @Path("/loadUsers")
    @Produces(MediaType.APPLICATION_JSON)
    public void loadUsers(@Suspended AsyncResponse asyncResponse) {

        //TODO: ManagedExecutorService

        new Thread(new Runnable() {

            @Override
            public void run() {
                List users = loadBigUsers();
                asyncResponse.resume(users);
            }

            private List loadBigUsers() {
                return null; // Return big list
            }

        }).start();
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

java asynchronous jax-rs java-ee-7

0
推荐指数
1
解决办法
481
查看次数

我可以创建一个请求范围的对象并从任何地方访问它,并避免将其作为参数传递给JAX-RS吗?

假设我有一个Web服务/一个使用某些HTTP标头参数调用的REST资源。resource方法构建一个复杂的数据对象(当前为POJO),并最终将其返回给客户端(通过Gson作为JSON,但这无关紧要)。

所以我有这个调用层次结构:

@Path(foo) ProjectResource @GET getProject()
-> new Project()
-> new List<Participant> which contains lots of new Participant()s
-> new Affiliation()
Run Code Online (Sandbox Code Playgroud)

如果我想Affiliation根据标题参数以英语或德语填充对象,则必须将其作为参数传递给链下。我想避免这样做。也许这从根本上讲是不可能的,但是感觉太不对了。所有这些对象仅存在于请求中,因此能够从任何地方访问与请求相关的信息是否方便?

我希望我可以例如定义一个CDI @RequestScoped对象,该对象会初始化自身(或由某些WebFilter填充),然后可以在可能需要的位置注入。

但是显然,这在POJO内部是行不通的,而且我也很难从请求范围的对象内部获取标头。

我已经阅读了许多关于EJB,JAX-RS上下文和CDI的SO问题/答案,但是我无法解决。

我期望太多了吗?传递参数确实是首选选项吗?

jax-rs cdi

0
推荐指数
1
解决办法
968
查看次数

JAX-RS客户端过滤器在将请求分派给服务器之前修改标头

在JAX-RS(RestEasy)中,我想实现一个客户端过滤器,在发送请求之前修改标头,因此我不会为每次调用手动执行此操作.

目前我在接收端这样做是为了在到达资源之前拦截请求.

@Provider
@Priority(Priorities.AUTHENTICATION)
public class AuthenticationFilter implements ContainerRequestFilter {

    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {

        // read header
    }
Run Code Online (Sandbox Code Playgroud)

现在我知道了(如果我错了,纠正我):

在接收端,ContainerRequestFilter可以在请求到达资源并获取请求之前使用.

但我想在客户端实现这一点,在请求发送到服务器之前修改标头.可以使用相同的服务器过滤器,还是有类似于客户端的东西?

jax-rs resteasy

0
推荐指数
1
解决办法
2031
查看次数

Java Rest API JAX-RS中的多个参数 - GET方法

我想将多个参数传递给我的方法.我该怎么做呢?我希望网址看起来像这样的http:// host/one/two/three/four

到目前为止,我有以下代码

@GET
@Produces({MediaType.APPLICATION_JSON})
@Path("/{one,two,three}") 

public List<Person> getPeople(@PathParam ("one") String one, @PathParam ("two") String two, @PathParam ("three") String three){
   String one = one; 
   String two = two; 
   String three = three;

}
Run Code Online (Sandbox Code Playgroud)

这是抓住params并将其传递给我的方法的正确语法吗?我见过@Path中使用的一些正则表达式,但我不明白.老实说,我真的只想抓住参数并尽可能将它们放入变量中.

java rest tomcat jax-rs

0
推荐指数
1
解决办法
1585
查看次数

如何使用JAX-RS和Angular 2+下载zip文件

如何下载由JAX-RS资源公开的zip文件并使用Angular2 final将其提供给用户?

jax-rs download java-ee angular

0
推荐指数
1
解决办法
6562
查看次数

使用JAX-RS而不是特定于实现

我有一个服务,我想以几乎相同的方式在一些项目中消费.我想简化向这些项目发送数据和从这些项目接收数据的过程,因此我想创建一个客户端jar来处理打包和解包jaxrs响应/请求的过程,并将其包含在我的其他项目中.

但是,要使用任何jax-rs对象,我必须依赖于jax-rs的特定实现.在我的小客户端库中,我必须包含jersey(或resteasy或cxf)才能访问任何jax-rs导入.如果我将这个jar包含在我的任何其他项目中,他们也将被迫使用该休息实现.

有没有办法创建一个利用jax-rs对象的单个项目jar,它将使用消费容器的jax-rs实现,而不是只有许多几乎相同的客户端项目,只包含不同的jax-rs实现?

从本质上讲,我希望我的项目大战能够包含一个jar,它将处理打包和解包jax-rs rest对象,这些对象使用war项目使用的jax-rs的任何实现.

java jax-rs

0
推荐指数
1
解决办法
517
查看次数