1
我想重拍此解决方案在这里找到 Basic HTTP authentication with Jersey/GrizzlyJava的球衣进口包
我已经包含这些进口到目前为止
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和那个不能被球衣发现的人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");
}
}
感谢您的。我已经更新了原来的问题,并考虑了你的建议。我如何导入AuthenticationException? – Rentonie 2015-04-01 16:11:28
最有可能是作者的混合物。这不是一个标准的课程。只需使用'javax.ws.rs.NotAuthorizedException'。您需要做的一件事是,您的代码的作者没有做的事情是,当身份验证失败或没有标头时,发送一个标头“WWW-Authenticate:Basic realm = SomeRealm”。这是[Basic Authentication Protocol](http://en.wikipedia.org/wiki/Basic_access_authentication) – 2015-04-01 16:17:34
的一部分。我的程序会编译但测试失败,所以还没有太多工作。你仍然很有帮助,我会接受答案。不知道如何做标题的事情,但不要打扰。谢谢。 – Rentonie 2015-04-01 16:24:57