如何在 jersey 1.11 过滤器中添加自定义响应和中止请求
Posted
技术标签:
【中文标题】如何在 jersey 1.11 过滤器中添加自定义响应和中止请求【英文标题】:How to add custom response and abort request in jersey 1.11 filters 【发布时间】:2013-06-13 04:05:29 【问题描述】:我正在尝试在 jersey 1.11 过滤器中为 rest 调用实现用户身份验证。
这是我尝试过的
package com.ilrn.session.webservices.rest.filter;
import com.ilrn.entity.User;;
import com.sun.jersey.spi.container.ContainerRequest;
import com.sun.jersey.spi.container.ContainerRequestFilter;
public class CustomFilter implements ContainerRequestFilter
@Override
public ContainerRequest filter(ContainerRequest request)
User user = Helper.getCurrentUser();
if(user == null)
//Need to add custom response and abort request
return request;
有没有人知道任何方法或东西可以达到同样的效果?
【问题讨论】:
【参考方案1】:如果发生错误,如果要发送自定义响应,则需要抛出 WebApplicationException。创建一个 Response 对象并使用以下异常构造函数将其发回:
WebApplicationException(Response response)
Construct a new instance using the supplied response
试试这个:
@Override
public ContainerRequest filter(ContainerRequest request)
User user = Helper.getCurrentUser();
if(user == null)
ResponseBuilder builder = null;
String response = "Custom message";
builder = Response.status(Response.Status.UNAUTHORIZED).entity(response);
throw new WebApplicationException(builder.build());
return request;
【讨论】:
@JunedAhsan 感谢您提供答案。 Jersey 2.X 的文档比 1.X 好,这部分不是很清楚,直到我看到你的回复。 @AkshayaAradhya Jersey 自成立以来在代码和文档方面都有很大改进。但我喜欢这个框架,因为 jersey 是我用于 RESTful 服务的第一个框架,它让我的生活变得更简单。 @JunedAhsan 请让我知道是否有办法在上面显示的示例中返回 ok 响应。 @AkshayaAradhya 过滤器旨在修改请求。所以通常你不需要通过抛出异常来中止请求。只需返回原始请求。如果您仍想以 ok 响应中止,只需将“Response.Status.UNAUTHORIZED”替换为 Response.Status.ok。 @TheoBriscoe 是否可以在不抛出异常的情况下返回请求。我想返回一个好的响应。在不需要异常的情况下抛出异常似乎是错误的。以上是关于如何在 jersey 1.11 过滤器中添加自定义响应和中止请求的主要内容,如果未能解决你的问题,请参考以下文章
将自定义数据从 Jersey Filter 服务传递到 Jersey End-Point 服务
使用 ContainerRequestFilter 在 Jersey WebService 中自定义 @RolesAllowed 角色