【问题标题】:Java Jersey 2 implementing filtersJava Jersey 2 实现过滤器
【发布时间】:2015-06-19 03:15:00
【问题描述】:

我想包含一个过滤器,以便我可以检查每个请求的基本身份验证标头

import java.io.IOException;
import javax.ws.rs.client.ClientRequestContext;
import javax.ws.rs.client.ClientRequestFilter;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.Provider;
import javax.ws.rs.container.PreMatching;

@Provider
@PreMatching 
public class CheckRequestFilter implements ClientRequestFilter {

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

        ServiceProvider sp = new ServiceProvider();


        /*if (sp.authenticateSP(requestContext.getHeaderString("authorization"))     == false){ */
            requestContext.abortWith(
                        Response.status(Response.Status.BAD_REQUEST)
                .entity("User cannot be authenticated")
                        .build());

}}
//}

到目前为止,这就是我按照https://jersey.java.net/documentation/latest/user-guide.html#filters-and-interceptors 此处的文档得出的结论

我的问题是我不知道如何包含过滤器以便我可以测试它(即复制粘贴第一个示例不起作用)以及我的方法是否正确。

我想在将来限制某些请求,但现在我只想工作。

【问题讨论】:

  • 需要在Web.xml中添加过滤器类
  • @user1354678 我没有 web.xml。我不需要一个。我用球衣 2
  • 只是不工作吗?尝试用 javax.ws.rs.ext.Provider 注释类
  • 我也觉得,你可能想用这个:ContainerRequestFilter
  • @znurgl 添加提供者和预匹配是文档工作中的第一个示例。我正在调整我的代码,但到目前为止无济于事。

标签: java jersey servlet-filters jersey-2.0


【解决方案1】:

你应该使用 ContainerRequestFilter

这里是 API:https://jax-rs-spec.java.net/nonav/2.0/apidocs/javax/ws/rs/container/ContainerRequestFilter.html

这是一个例子:

public class AuthorizationRequestFilter implements ContainerRequestFilter {

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

        final SecurityContext securityContext =
                    requestContext.getSecurityContext();
        if (securityContext == null ||
                    !securityContext.isUserInRole("privileged")) {

                requestContext.abortWith(Response
                    .status(Response.Status.UNAUTHORIZED)
                    .entity("User cannot access the resource.")
                    .build());
        }
    }
}

【讨论】:

  • 太好了,谢谢。如果失败,也应该添加@Provider!
猜你喜欢
  • 1970-01-01
  • 2013-05-28
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 2017-04-18
  • 1970-01-01
相关资源
最近更新 更多