【问题标题】:how can i get the asked servlet in the current filter?如何在当前过滤器中获取询问的 servlet?
【发布时间】:2015-01-19 00:13:10
【问题描述】:

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

在我正在编写的过滤器中,我需要知道用户询问的 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。但是这个对象是私有的,所以我不能使用它。你知道帮助我的方法吗?

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

谢谢你的帮助

【问题讨论】:

    标签: java servlets servlet-filters


    【解决方案1】:

    如果您运行的是 4.0 或更高版本的 Servlet API,则会在运行时构建一个映射类,您可以为此目的使用:

    HttpServletMapping    
    

    您可以从请求中提取映射的 servlet 名称,如下所示:

    String servletName = ((HttpServletRequest) request).getHttpServletMapping().getServletName();
    

    【讨论】:

    • 更新答案以解决这两个批评。
    【解决方案2】:

    您可以使用方法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();
        ...
    }
    

    【讨论】:

    • 我已经找到了getMethod。还是非常感谢。正如你所说,servletPath 方法给了我定义到 web.xml 中的 url 模式,而不是 servlet 名称。这不是我想要的。但是,如果您知道一种从 servlet 路径获取 servlet 名称的方法,我会接受的。
    • 我终于找到了自己的解决方案。我编写了一个解析 web.xml 文件的函数来搜索我需要的 servlet
    猜你喜欢
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 2016-12-18
    • 2010-12-04
    • 2016-07-31
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多