继承Servlet而不是使用过滤器

时间:2014-03-16 19:50:06

标签: java java-ee servlets filter servlet-filters

通过阅读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。

这是错的吗?在某些情况下,我理解过滤器的效用,但我仍然对这个例子感到困惑。 谢谢。

0 个答案:

没有答案