(对不起我的英语,我说法语)
在我正在编写的过滤器中,我需要知道用户询问的servlet的名称。它将允许我检查 servlet 是否与我的数据库条目匹配。事实上,我正在编写一个限制过滤器。这是它的工作原理:
我在数据库中检查是否为当前用户的访问权限定义了条目servletName-service。如果是,则调用servlet,否则重定向到连接页面。
如何在过滤器中获取当前Servlet对象或名称?
使用Eclipse的调试工具,我注意到作为Filter.doFilter方法的参数给出的FilterChain对象包含一个名为“userListe”的对象servlet。但是这个对象是私有的,所以我不能使用它。你知道帮助我的方法吗?
((我真的需要在过滤器中完成这项工作,因为涉及到许多servlet。))
感谢您的帮助
您可以使用httpRequest方法。getServletPath()
以确定调用了哪个servlet。它返回当前servlet的URL(例如/users/liste
),这与servlet名称不同,但如果我正确理解您的问题,它应该会成功。
您可以使用httpRequest方法。getMethod()
检索使用的http方法(get、post等)。
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
HttpServletRequest httpRequest = (HttpServletRequest) request;
String servletPath = httpRequest.getServletPath();
String httpMethod = httpRequest.getMethod();
...
}
如果您运行的是 4.0 版或更高版本的 Servlet API,那么在运行时会构造一个映射类,并可用于此目的:
HttpServletMapping
您可以从请求中提取映射的 servlet 名称,如下所示:
String servletName = ((HttpServletRequest) request).getHttpServletMapping().getServletName();
问题内容: 我定义了一个,并且具有带有Spring注释的Java类。 我想将Bean 放入我的,因此尝试了以下操作: 但是它总是返回。我怎样才能得到一个Spring bean? 问题答案: 尝试: 你的bean在应用程序上下文中的名称/标识在哪里。甚至更好: 还可以看看GenericFilterBean及其子类。
我正在处理一个安全过滤器,它需要根据path变量的值做一些检查。我试着这样做: 但映射始终为空,因此我的筛选器的优先级似乎高于在请求中填充属性的。 我已尝试添加以下配置: 这没有帮助,筛选器是在调用之前执行的。 在我的安全过滤器中,我获取Auth头,解密它,从中获取并将它与路径var值进行比较。如果这些ID不匹配,我返回403。 我想知道是否有可能覆盖这两个动作的顺序。或者,也许,有其他的方法来检
问题内容: 我的应用程序中有2个过滤器。根据某些条件,我想选择是否执行第二个过滤器。有没有办法做到这一点? 我做了一些谷歌搜索,但没有成功。我希望请求继续执行而不执行第二个过滤器。那可能吗? 任何帮助将不胜感激。 问题答案: 您可以在请求中设置一个属性,然后在第二个过滤器中对其进行检查。 您可以像这样简化上面的代码: 这样,您只需检查属性“ executeSecondFilter”的存在
问题内容: 我用来发出几个http请求(显然)。现在,我需要发出请求并从最终URL中提取一些查询字符串(存在重定向)。 因此,问题是如何找到URL(如果重定向了客户端,则为最终URL)?Response中没有这样的字段。 请注意,我不需要停止重定向…仅在请求后查找URL是什么 问题答案: 您将回调添加到 然后,您可以在发生新请求时对其进行检查。只要确保设置某种限制来防止重定向循环(如文档中所述,默
问题内容: 但是我使用的是Java Jersey2.4,找不到ResourceFilterFactory或ResourceFilter类的任何标志。该文档也没有提及它们。它们是否已被弃用,或者它们是否真的隐藏得很好?如果已弃用它们,我该怎么用呢?泽西岛2.4和2.5现在是否可以从ContainerRequestFilter获取资源注释? 谢谢 问题答案: 如果要基于资源方法/类上可用的注释来修改请
我想通过Spring过滤器或方面记录超文本传输协议请求中的请求参数。我尝试了不同的方法,但请求参数为空或未调用方法。我使用的是POSTMAN,它是一个POST请求。 http://localhost:8080/available data 请求正文示例: {“keyUserAgent”:“CFNetwork/1209 Darwin/20.2.0”,“locale”:“en_US”,“eid”:“8