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

时间:2015-01-19 00:13:11

标签: 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。但是这个对象是私有的,所以我不能使用它。你知道一种帮助我的方法吗?

((我真的需要把这个工作放到过滤器中,因为涉及很多servlet。))

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

如果您正在运行Servlet API的4.0版或更高版本,则将在运行时构造一个映射类,您可以为此使用它:

HttpServletMapping    

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

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

答案 1 :(得分:0)

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