簡體   English   中英

Java Jersey 2實現過濾器

[英]Java Jersey 2 implementing filters

我想包括一個過濾器,以便我可以檢查每個請求的基本身份驗證標頭

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());
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM