Java Jersey 2 实现过滤器
Java Jersey 2 implementing filters
我想包含一个过滤器,以便我可以检查每个请求的基本身份验证 headers
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
我的问题是我不知道如何添加过滤器以便测试它(即复制粘贴第一个示例不起作用)以及我的方法是否正确。
我想限制它用于将来的某些请求,但现在我只想工作。
您应该使用 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());
}
}
}
我想包含一个过滤器,以便我可以检查每个请求的基本身份验证 headers
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
我的问题是我不知道如何添加过滤器以便测试它(即复制粘贴第一个示例不起作用)以及我的方法是否正确。
我想限制它用于将来的某些请求,但现在我只想工作。
您应该使用 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());
}
}
}