【问题标题】:Can a servlet filter distinguish between and filter out unauthorized POST, GET, DELETE, etc. requests?servlet 过滤器能否区分和过滤未经授权的 POST、GET、DELETE 等请求?
【发布时间】:2015-07-31 18:44:18
【问题描述】:

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

现在,每个带注释的端点类都有自己的代码来检查未经授权的方法(除了 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 过滤器吗?

【问题讨论】:

  • HttpServletRequest 有一个 getMethod 方法,它会告诉你它的类型。
  • 感谢您的回答,但我正在尝试查看过滤器是否可以确定HTTP方法。
  • 是的,过滤器可以访问HttpServletRequest,它可以调用getMethod 方法来检查它是否是GET 或其他任何东西。如果是别的,它可以用 405 响应。
  • 但是,我使用的是 web.xml 转发到带注释的 Java 类。有人告诉我,我需要一个 servlet 过滤器来过滤 HTTP 方法,但我看不到两者是如何连接的。
  • SotiriosDelimanolis 已经告诉过你(两次)。您误解了过滤器可以检测到的内容以及 web.xml 配置可以配置的内容。过滤器可以检测到方法(通过使用请求的getMethod()),即使在web.xml中无法配置。

标签: java rest servlet-filters


【解决方案1】:

是的,Servlet 过滤器可以做到。这里有两件事,一是将过滤器映射到您希望它过滤的所有路径(url-patterns)。其次是让它过滤掉非 GET 方法。下面是过滤掉非 GET 请求的过滤器的代码。只需在//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 {
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-27
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 2022-01-11
    • 1970-01-01
    • 2011-12-18
    相关资源
    最近更新 更多