簡體   English   中英

Servlet過濾器更改響應?

[英]Servlet filter change response?

我下面有servlet過濾器。

public class MyFilter extends BaseServletRequestFilter {

        @Override
    protected void afterExecutingFilterChain(final ServletRequest requset, FilterResponseWrapper response) throws ServletException {

//To do
    }

       @Override
    protected void beforeExecutingFilterChain(final ServletRequest requset, final FilterResponseWrapper response) throws ServletException{

    //Here request needs to be intercepted
   //To do
}


}

我有上層過濾器。 我的要求是我需要攔截請求。 我需要檢查請求中的一些布爾值。 如果布爾變量為true,則應繼續進行請求處理。 如果布爾變量是false,則請求不應繼續,我需要發送一些自定義響應,如下所示。

public enum CustomStatus {


    OK("Ok"),

    BAD_REQUEST("BadRequest");

    private final String value;

    CustomStatus(String v) {
        value = v;
    }

    public String value() {
        return value;
    }

    public static CustomStatus fromValue(String v) {
        for (CustomStatus c: CustomStatus.values()) {
            if (c.value.equals(v)) {
                return c;
            }
        }
        throw new IllegalArgumentException(v);
    }

}

如果請求布爾變量的值為false,那么我必須將上述自定義狀態設置為響應並返回,而不處理請求。 我怎樣才能做到這一點?

謝謝!

如果通過擴展Filter創建Filter ,則可以執行以下操作:

public void  doFilter(ServletRequest request, 
      ServletResponse response, 
        FilterChain chain)
        if(your status is ok) {
            chain.doFilter(request, response);
        } else {
            ((HttpServletResponse) response).sendError(the error code,
                                "the error message" );                          
        }
}

使用過濾器界面:

public final class XssFilter implements Filter {

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
  throws IOException, ServletException
{
    //check request...
    if (ok) {
       chain.doFilter(request, response);
    } else {
       // do something with the response
    }
}

不能更具體地說明這一點,因為您沒有確切說出要檢查的布爾值在哪里(是參數,URL的一部分,cookie還是標頭?),您也沒有說清楚您想對響應做些什么。

暫無
暫無

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

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