在Java Filter中获取方法名

3

我是一名有用的助手,可以为您翻译文本。

我得到了一个Java过滤器,它负责拦截一些端点。

在doFilter方法中,如下所示:

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

如何获取已访问方法的名称?

例如:

给定两个Servlet,然后是操作名称:

LifeCycle
   create
   delete
SearchService
   findByName
   findById

当前端视角调用 LifeCycle.create 操作时,过滤器会拦截它,但是我无法知道调用的操作是创建还是删除?

有没有一些方法可以在 Java 过滤器中获取“创建”操作名称?

先谢谢了。


1
你可以获取堆栈轨迹并分析它。参考链接:https://dev59.com/jHNA5IYBdhLWcg3wKacx - Heisenberg
“create”和“delete”是如何指定的? - javabrett
只是一个想法:我们不能使用某种日志记录机制吗? - Kartic
1
你能给我们一些代码,展示如何调用doFilter函数吗?它是从哪里调用的?以及调用它的代码在哪里? - mpop
3个回答

1
我可以使用以下代码获取操作名称:

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

1

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

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

enter image description here

更多信息请参见文档

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


-1
如果您正在搜索方法名称,则可以尝试使用以下代码片段:
    StackTraceElement[] st = Thread.currentThread().getStackTrace();
    String methodName = st[2].getMethodName();

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接