【发布时间】:2015-06-06 07:04:52
【问题描述】:
我正在尝试重新制作此处找到的解决方案 Basic HTTP authentication with Jersey / Grizzly
到目前为止,我已经包含了这些导入
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 找不到的那个有什么办法吗?
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");
}
}
【问题讨论】:
标签: java security import jersey jax-rs