servlet: 过滤器 filter

servlet的三大组件
servlet

  • filter 过滤器
  • Listener 监听器

过滤器是用来过滤http请求的


//继承于filter(javax.servlet)
public class LoginFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // 初始化, 当前的过滤器对象创建出来的时候, 该方法会执行
        // 一般在该方法中读取web.xml中的参数
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        //强转成HttpServletRequest
        HttpServletRequest req = (HttpServletRequest) request;
        //取出session
        HttpSession session = req.getSession();
        // 从session中取出登录的用户信息
        Object user = session.getAttribute("user");
        // 如果可以取出用户
        if (user != null) {
            // 对该请求进行放行
            chain.doFilter(request, response);
        } else {
            // 用户没登录
            HttpServletResponse resp = (HttpServletResponse) response;
            // 重定向回登录页面
            resp.sendRedirect("/login");
        }
    }

    @Override
    public void destroy() {
        // 当前过滤器被销毁的时候会执行
        // 一般用于释放资源
    }

    // 在Filter的接口中 init和destroy 方法default被标记所以使用时可以不重写
}

在 wed.xml中进行配置

    <!--配置过滤器-->
    <filter>
        <filter-name>LoginFilter</filter-name>
        <filter-class>com.lanou.demo.filter.LoginFilter</filter-class>
    </filter>

    <!--配置过滤器映射-->
    <filter-mapping>
        <filter-name>LoginFilter</filter-name>
        <url-pattern>/user</url-pattern>
    </filter-mapping>
    <!--如要配置多个就多些几个映射-->
    <filter-mapping>
        <filter-name>LoginFilter</filter-name>
        <url-pattern>/book</url-pattern>
    </filter-mapping>

猜你喜欢

转载自www.cnblogs.com/lxx-1843693653/p/10922431.html