Java 球衣导入包

Java jersey importing packages

我正在尝试重新制作在此处找到的解决方案

到目前为止我已经包含了这些导入

import javax.ws.rs.WebApplicationException;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.Response.Status;

经过一番搜索,我收录了这个

import org.glassfish.jersey.server.ContainerRequest;

我的问题是我现在收到这些错误

... AuthFilter is not abstract and does not override abstract method filter(ContainerRequestContext) in ContainerRequestFilter

... method does not override or implement a method from a supertype

... cannot find symbol
[ERROR] symbol:   method getHeaderValue(String)
[ERROR] location: variable containerRequest of type ContainerRequest

如果您不想切换标签页,代码在这里

    @Override
    public ContainerRequest filter(ContainerRequest containerRequest) 
            throws WebApplicationException {

        // Automatically allow certain requests.
        String method = containerRequest.getMethod();
        String path = containerRequest.getPath(true);
        if (method.equals("GET") && path.equals("application.wadl"))
            return containerRequest;

        // Get the authentication passed in HTTP headers parameters
        String auth = containerRequest.getHeaderValue("authorization");
        if (auth == null)
            throw unauthorized;

不幸的是,我没有向 OP 询问所需的声誉,因此不胜感激。

编辑:显然 com.sun.jersey.spi.container.ContainerRequest 不包含 getHeadervalue 并且 jersey 2.0 无法找到包含 getHeadervalue 的那个有什么办法解决它吗?

import javax.ws.rs.WebApplicationException;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.ContainerRequestContext;

import org.glassfish.jersey.internal.util.Base64;
import java.io.IOException;

public class AuthFilter implements ContainerRequestFilter {

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

        String method = requestContext.getMethod();
        String path = requestContext.getUriInfo().getPath();


        String auth = requestContext.getHeaderString("authorization");
        if (auth == null)
            throw new AuthenticationException("Too bad");
        //how to import that ^

        auth = auth.replaceFirst("[Bb]asic ", "");

        String entry = new String(Base64.decode(auth));


        if (!entry.equals("admin:password"))
            throw new AuthenticationException("Too bad");
    }
 }

link 中的 class 正在实施特定于 Jersey 1 的 ContainerRequestFilter。从 JAX-RS 2(泽西岛 2.x)开始,class 名称成为标准 class(只是名称)。该方法的新签名是

import java.io.IOException;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;

public class Hello implements ContainerRequestFilter {

    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {
        requestContext.getMethod();
        requestContext.getUriInfo().getPath();
        requestContext.getHeaderString("authorization");
    } 
}

我添加了对一些类似方法的更改调用,这些方法在 class

中使用

您还可以找到 link 到完整的基本身份验证示例 in this answer。它来自 Jersey 项目示例,它使用 Jersey 2