有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaServlet过滤器更改响应?

我有下面的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,那么我必须将上述自定义状态设置为response并返回,而不处理请求。我该怎么做

谢谢


共 (2) 个答案

  1. # 1 楼答案

    如果通过扩展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" );                          
            }
    }
    
  2. # 2 楼答案

    使用过滤器界面:

    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或标头?),你也没有说你想对回复做什么