servlet过滤器能否区分并过滤掉未经授权的POST,GET,DELETE等请求?

时间:2015-07-31 18:44:19

标签: java rest servlet-filters

我们有一些REST端点(例如/ getalleuropeancars或/ getalljapanesecars或/ getallamericancars)。这些端点都是GET 唯一

现在,每个带注释的端点类都有自己的代码,用于检查未授权的方法(除了GET之外的所有方法)。我们希望一个班级处理所有未经授权的方法;你知道,代码重用以及所有这些。

过滤器是否能够区分" GET / getalleuropeancars"和" POST / getalleuropeancars"和" DELETE / getalleuropeancars"并重定向到适当的地方?看看servlet过滤器,它们似乎只能检测不同的URL路径,而不是不同的HTTP方法。

<url-pattern>/getalleuropeancars</url-pattern>
<url-pattern>/getalljapanesecars</url-pattern>
<url-pattern>/getallamericancars</url-pattern>

那么,servlet过滤器是我们需要的吗?

1 个答案:

答案 0 :(得分:0)

是的,Servlet过滤器可以做到这一点。这里有两件事,一件是将Filter映射到您希望它过滤的所有路径(url-patterns)。第二是让它过滤掉非GET方法。以下是过滤掉非GET请求的过滤器的代码。 Jus使用您自己的代码填写//return error以返回错误。

public class OnlyGetsFilter implements Filter {

    @Override
    public void doFilter(ServletRequest sr, ServletResponse sr1, FilterChain fc) throws IOException, ServletException {
        HttpServletRequest hsr = (HttpServletRequest) sr;
        if (!"GET".equals(hsr.getMethod())) {
            //return error
        } else {
            fc.doFilter(sr, sr1);
        }
    }

    @Override
    public void destroy() {
    }

    @Override
    public void init(FilterConfig fc) throws ServletException {
    }

}