【问题标题】:Get method name in Java Filter在 Java 过滤器中获取方法名称
【发布时间】:2015-08-04 12:50:32
【问题描述】:

有一个Java过滤器负责拦截一些端点。

在doFilter方法中,如下:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException;

如何获取访问的方法名?

例如:

给定 2 个 Servlet,后跟操作名称:

LifeCycle
   create
   delete
SearchService
   findByName
   findById

LifeCycle.create操作被前端透视调用时,过滤器拦截了它,但是我不知道调用的操作是创建还是删除?

有没有办法在 Java Filter 中获取“create”操作名?

提前致谢。

【问题讨论】:

  • stackoverflow.com/questions/1069066/…你可以获取stacktrace并进行分析
  • 如何指定“创建”和“删除”?
  • 只是一个想法:我们不能使用某种日志记录机制吗?
  • 你能给我们一些关于如何调用 doFilter 的代码吗?以及从哪里调用它的代码?

标签: java servlets filter


【解决方案1】:

当向服务器(servlet 或 jsp)发出请求时,Web 容器会调用过滤器。它们不被 Servlet 或 jsps 调用。

您可以在下图中看到过滤器的生命周期:

更多请看DOCUMENTATION

如果你想知道前端调用了哪个action,那么你可以使用一个请求参数,然后从ServletRequest捕获它

【讨论】:

    【解决方案2】:

    我可以使用以下方法获取操作名称:

    ((HttpServletRequest) request).getHeader("SOAPAction");
    

    【讨论】:

      【解决方案3】:

      如果你正在搜索方法名,那么你可以试试这段代码:

          StackTraceElement[] st = Thread.currentThread().getStackTrace();
          String methodName = st[2].getMethodName();
      

      您可以进一步修改 st 的索引以获取链式调用方法。它只是一个包含类和方法名称的简单堆栈跟踪对象数组。祝你好运!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-08
        • 1970-01-01
        • 2022-08-15
        • 1970-01-01
        • 1970-01-01
        • 2016-12-03
        • 2011-09-13
        • 2010-11-13
        相关资源
        最近更新 更多