java - 我怎样才能在当前过滤器中获取请求的servlet?

标签 java servlets servlet-filters

(抱歉我的英语不好,我说法语)

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

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

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

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

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

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

谢谢你的帮助

最佳答案

您可以使用方法httpRequest.getServletPath()来确定调用了哪个servlet。它返回当前 servlet 的 URL(例如 /users/liste),该 URL 与 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();
    ...
}

关于java - 我怎样才能在当前过滤器中获取请求的servlet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28016318/

相关文章:

java - Path.resolve(other) java.nio.file.Path 方法

java - Android webview 出现错误

java - 对获取使用 Servlet 写入文本文件的路径感到困惑

java - 资源解析器异常 : Cannot resolve element with ID Body

使用 Protocol Buffer 进行 Java 序列化

Java Servlet 命令行处理

javascript - 将 Javascript 值检索到 Servlet 等的可能方法

java - chain.doFilter 在 Filter.doFilter 方法中做了什么?

jsf - 使用 Servlet 3.0 以编程方式控制登录

java - 应捕获所有 HTML 输入内容以进行操作的捕获所有 servlet 过滤器,仅间歇性工作