通过阅读this answer,我注意到了给定的例子:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
if (((HttpServletRequest) request).getSession().getAttribute("user") == null) {
// User is not logged in. Redirect to login page.
((HttpServletResponse) response).sendRedirect("login");
} else {
// User is logged in. Just continue with request.
chain.doFilter(request, response);
}
}
让我们不得不在web.xml中写道:
<filter>
<filter-name>RestrictionFilter</filter-name>
<filter-class>com.myproject.filters.RestrictionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>RestrictionFilter</filter-name>
<url-pattern>/restrained/*</url-pattern>
</filter-mapping>
但是我想完全自由地选择哪个url必须被限制为loged成员(为每个url-pattern指定必须激活的过滤器,这有点烦人。)
我曾经创建一个继承HttpServlet和附加服务()的Servlet来检查会话是否包含成员实例,然后调用&#34; true&#34; service()方法:
public abstract class MembreHttpServletProjet1 extends HttpServlet{
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
if(req.getSession().getAttribute("membre") == null){
resp.sendRedirect(req.getContextPath() + "/accueil");
return;
}
super.service(req, resp);
}
}
通过这种方式,如果只有当用户作为成员加载时才需要使用servlet,我将通过MembreHttpServletProjet1继承此servlet。
这是错的吗?在某些情况下,我理解过滤器的效用,但我仍然对这个例子感到困惑。 谢谢。