当前位置: 首页 > 知识库问答 >
问题:

如何在当前过滤器中获取询问的 servlet?

姜鸿
2023-03-14

(对不起我的英语,我说法语)

在我正在编写的过滤器中,我需要知道用户询问的servlet的名称。它将允许我检查 servlet 是否与我的数据库条目匹配。事实上,我正在编写一个限制过滤器。这是它的工作原理:

  • 用户尝试获取链接到userListe Servlet的URL /users/liste
  • 第一个过滤器(SimpleConnexion)检查用户对象是否在http会话中定义(=用户是否连接?)。如果用户已连接,则调用第二个过滤器,否则将发送指向Connexion页面的重定向。
  • 在第二个过滤器(Accessright)中,我需要servlet的名称(userListe)和服务方法(即get、post、head、put、delete、…)。

我在数据库中检查是否为当前用户的访问权限定义了条目servletName-service。如果是,则调用servlet,否则重定向到连接页面。

如何在过滤器中获取当前Servlet对象或名称?

使用Eclipse的调试工具,我注意到作为Filter.doFilter方法的参数给出的FilterChain对象包含一个名为“userListe”的对象servlet。但是这个对象是私有的,所以我不能使用它。你知道帮助我的方法吗?

((我真的需要在过滤器中完成这项工作,因为涉及到许多servlet。))

感谢您的帮助

共有2个答案

姜明贤
2023-03-14

您可以使用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();
    ...
}
荀学文
2023-03-14

如果您运行的是 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获取资源注释? 谢谢 问题答案: 如果要基于资源方法/类上可用的注释来修改请

  • 问题内容: 获取当前时间的模块/方法是什么? 问题答案: 采用: 而只是时间: 有关更多信息,请参见文档。 要保存输入,可以datetime从datetime模块中导入对象: 然后datetime.从以上所有位置移除引线。