(抱歉我的英语,我说法语)
在我正在编写的过滤器中,我需要知道用户询问的servlet的名称。它将允许我检查servlet是否匹配我的数据库的条目。 事实上,我正在编码限制过滤器。这是它的工作原理:我在数据库中检查是否为当前用户的访问权限定义了条目servletName-service。 如果是,则调用servlet,否则重定向到连接页面。
如何在过滤器中获取当前Servlet对象或名称?
使用Eclipse的调试工具,我注意到作为Filter.doFilter方法参数给出的FilterChain对象包含一个名为'userListe'的对象servlet。但是这个对象是私有的,所以我不能使用它。你知道一种帮助我的方法吗?
((我真的需要把这个工作放到过滤器中,因为涉及很多servlet。))
感谢您的帮助
答案 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();
...
}