我如何在当前过滤器中获取所要求的servlet?

问题描述 投票:1回答:2

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

在我正在写的过滤器中,我需要知道用户询问的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
2个回答
0
投票

您可以使用方法httpRequest.getServletPath()确定调用了哪个servlet。它返回当前servlet的URL(例如/users/liste),该URL与servlet的名称不同,但是如果我正确理解了您的问题,它应该可以解决问题。

您可以使用方法httpRequest.getMethod()检索使用的http方法(获取,发布等)。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
    HttpServletRequest httpRequest = (HttpServletRequest) request;
    String servletPath = httpRequest.getServletPath();
    String httpMethod = httpRequest.getMethod();
    ...
}

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.