Tag: jax rs

JAX-RS和自定义授权

我正在尝试保护JAX-RS端点,目前正在尝试弄清楚身份validation和授权是如何工作的。 大多数示例都非常简单,因为它们只能通过web.xml从Java EE App-Server角色中捎带。 我想知道如何使用除Java EE AS角色以外的其他东西。 例如:我想使用会话或某种令牌(或某种标识符)。

将Apache Shiro Security Library与基于Dropwizard的JAX-RS应用程序集成

我想改变Dropwizard以支持Shiro。 我已经阅读了文档并且很少有人感到困惑。 我想将Shiro与表单登录身份validation和Apache Shiro Annotations结合使用。 我认为我需要使用Jersey Filters来支持Shiro。 这是支持泽西的Shiro注释而不是经典的Shiro Filter方法的正确方法吗? 由于Jersey Filters可以很好地访问带注释的资源,因此对我来说使用注释似乎是完美的。 我宁愿不使用AOP方法,与JAX-RS作为独立模块进行动态集成可能真的很棒。

是否可以使用JAX-RS设置ETag而无需使用Response对象?

在我发现的关于JAX-RS和缓存的少数问题(有答案)之一中 ,生成ETag(用于缓存)的答案是在Response对象上设置一些值。 如下所示: @GET @Path(“/person/{id}”) public Response getPerson(@PathParam(“id”) String name, @Context Request request){ Person person = _dao.getPerson(name); if (person == null) { return Response.noContent().build(); } EntityTag eTag = new EntityTag(person.getUUID() + “-” + person.getVersion()); CacheControl cc = new CacheControl(); cc.setMaxAge(600); ResponseBuilder builder = request.evaluatePreconditions(person.getUpdated(), eTag); if (builder == null) { builder = Response.ok(person); } return […]

如何在POST期间获取不同资源的JAX-RS @Path?

我有两个REST类用于简单的Web服务(Jersey和GlassFish),它涉及用户资源 – 一个用于操作所有用户(例如,@POSTing的工厂),另一个用于个人用户(例如,@ GET,@ PUT,@删除)。 他们在: @Stateless @Path(“users”) public class AllUsersResource {…} @Stateless @Path(“user”) public class OneUserResource {…} 分别。 在POST到AllUsersResource时,我想返回新用户的位置(通过Response.created(uri).build() ),例如, http://localhost:8080/…/user/152 我的问题是如何做到这一点。 AllUsersResource注入了@Context UriInfo uriInfo,但这并没有让我获得OneUserResource的@Path信息,只获得当前调用的信息(“users”)。 我最终使用它的方式只是使用reflection,但我担心它是脆弱和不洁的: OneUserResource.class.getAnnotation(Path.class).value(); 搜索StackOverflow我发现尝试的其他事情如下,但没有成功: com.sun.jersey.api.core.ResourceContext javax.ws.rs.core.UriInfo.getMatchedResources() @javax.inject.Inject OneUserResource oneUserRes; 任何帮助都会很棒!

WebApplicationException与Response

在REST服务中向客户端返回响应的所有可能性中,我看到了两种看起来相同的可能性:抛出WebApplicationException (可能使用Response实例)或返回Response实例。 为什么使用一种可能性而不是另一种,因为结果相同? 这与使用的REST框架有关,可以配置为在exception和常规响应之间做出不同反应吗?

异步JAX-RS的目的是什么

我正在阅读“使用JAX-RS 2.0的RESTful Java”一书。 我完全混淆了异步JAX-RS,因此我将所有问题都集中在一起。 这本书写的异步服务器如下: @Path(“/customers”) public class CustomerResource { @GET @Path(“{id}”) @Produces(MediaType.APPLICATION_XML) public void getCustomer(@Suspended final AsyncResponse asyncResponse, @Context final Request request, @PathParam(value = “id”) final int id) { new Thread() { @Override public void run() { asyncResponse.resume(Response.ok(new Customer(id)).build()); } }.start(); } } Netbeans创建这样的异步服务器: @Path(“/customers”) public class CustomerResource { private final ExecutorService executorService = […]

Jersey:默认缓存控制到无缓存

在编写RESTful Web服务时,如果我在客户端(当前是.NET胖客户端)上启用任何类型的缓存,我会遇到问题。 默认情况下,Jersey不发送任何类型的缓存控制头,因此客户端会自动缓存大多数页面(这似乎是有效的行为)。 我想让Jersey默认发送一个“no-cache”的缓存控件,然后特别是响应覆盖缓存控件。 有没有办法和泽西这样做? 我发现RESTeasy能够使用@NoCache注释来指定整个类的设置,但我没有找到与Jersey类似的东西。

如何在RESTEasy客户端框架中设置HTTP标头?

RESTEasy(一个JAX-RS实现)有一个很好的客户端框架 ,例如: RegisterBuiltin.register(ResteasyProviderFactory.getInstance()); SimpleClient client = ProxyFactory.create(SimpleClient.class, “http://localhost:8081”); client.putBasic(“hello world”); 你如何设置HTTP标头? 澄清: jkeeler提出的解决方案是一种很好的方法,但我想在ProxyFactory级别设置HTTP标头,我不想将标头传递给客户端对象。 有任何想法吗?

如何使用CXF,JAX-RS和HTTP缓存

CXF文档提到缓存为高级HTTP : CXF JAXRS通过处理If-Match,If-Modified-Since和ETags标头提供对许多高级HTTPfunction的支持。 JAXRS Request上下文对象可用于检查前提条件。 还支持Vary,CacheControl,Cookies和Set-Cookies。 我真的很想使用(或至少探索)这些function。 然而,虽然“提供支持”的声音非常有趣,但它在实现这些function方面并不是特别有用。 有关如何使用If-Modified-Since,CacheControl或ETags的任何帮助或指示?

如何使用@PathParam的自定义类型?

我想使用非spring bean类对象作为jersey web服务类方法的参数。 但它在构建时给出了缺少的依赖性错误。 我的代码是: @Component @Path(“/abcd”) public class ActorServiceEndpoint { @POST @Path(“/test/{nonspringBean}”) @Produces(MediaType.APPLICATION_XML) public void addActor(@PathParam(“nonspringBean”) MyNonSpringBeanClass nonspringBean){ } }