过滤器实例---判断用户是否登录

1.先写一个类实现Filter接口

实现里面的doFile方法,

  -->获取Session,判断session是否有值,

    -->如果有,调用chain.doFilter(request, response);

    -->如果没有,重定向到用户登录页面.

具体代码如下

    public void doFilter(ServletRequest request, 
            ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        //得到HttpServletRequest对象
        HttpServletRequest requ=(HttpServletRequest) request;
        //获取session中的值
        String username = (String) requ.getSession().getAttribute("username");
        //判断session中是否有值
        if(username!=null){
            //如果有值,则继续执行
            chain.doFilter(request, response);
        }else{
            //如果没有值,那麽重定向到登录页面
            HttpServletResponse respon=(HttpServletResponse) response;//得到HttpServletResponse对象
            respon.sendRedirect("/loginFilter/login.jsp");
        }
    }

2.建一个Servlet类继承自HttpServlet

  -->重写service方法

  -->获取到JSP页面传过来的username

  -->将获取的username设置到session中

具体代码如下:

public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //获取JSP传过来的username
        String username= request.getParameter("username");
        //判断username是否为空
        if(username!=null){
            //username不为空,将username设置在session中
            request.getSession().setAttribute("username", username);
            request.getRequestDispatcher("/WEB-INF/views/mainpage.jsp").forward(request, response);
        }
    }
}

3.web.xml中的配置

       <filter>
        <filter-name>UserInfoFilter</filter-name>
        <!-- 具体写过滤器的类的全限定名称-->
        <filter-class>com.gxxy.filter.UserInfoFilter</filter-class>
    </filter>
    
    <filter-mapping>
        <filter-name>UserInfoFilter</filter-name>
        <!-- 可以配置多个url-pattern -->
        <url-pattern>/user/*</url-pattern>
        <url-pattern>/user/hello</url-pattern>
    </filter-mapping>        

注意:有的时候,我们并不想过滤所有的请求,比如用户登录页面并不需要过滤,所以我们在配置servlet时,注释就可以这么写

@WebServlet("/login")//登录服务器
@WebServlet("/user/shopcart")//购物车服务器
@WebServlet("/user/userInfo")//用户信息服务器

我们只需要过滤/user/*即可

原文地址:https://www.cnblogs.com/zhang-bo/p/6516721.html