Filter

1·Filter 什么是过滤器

  1. filter过滤器是Javaweb的三大组件之一
  2. filter过滤器是javaee规范,即接口
  3. filter过滤器他的作用是:拦截请求,过滤响应

拦截请求常见的应用场景:

  1. 权限检查
  2. 日记操作
  3. 事务管理
    。。。。等等

2·Filter初体验

要求:在你的web工程下,有一个admin目录。这个admin目录下的所有资源(html页面、jpg图片、jsp文件等等)都必须是用户登录过户才能访问。

思考:根据之前我们学过的内容。我们知道,在用户登录之后的登录信息保存在Session域中。所以,要检查用户是否登录,可以判断Session中是否包含用户的登录信息即可

1·编写一个类趋势线Filter接口,并实现过滤方法doFilter

Filter的实现类

public class AdminFilter implements Filter {

   @Override
   public void init(FilterConfig filterConfig) throws ServletException {

   }

   /**
    * doFilter方法,专门用于拦截请求、可以做权限检查
    *
    * @param servletRequest
    * @param servletResponse
    * @param filterChain
    * @throws IOException
    * @throws ServletException
    */
   @Override
   public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

       HttpServletRequest httpServletRequest= (HttpServletRequest) servletRequest;
       HttpSession session = httpServletRequest.getSession();
       Object user=session.getAttribute("user");
  
       //如果等于null,说明还没有登录,那么我们转呗一个跳转页面
       if(user == null){
           servletRequest.getRequestDispatcher("/login.jsp").forward(servletRequest,servletResponse);
           return;
       }else{
           //让程序继续访问用户的目录资源
           filterChain.doFilter(servletRequest,servletResponse);
       }
   }

   @Override
   public void destroy() {

   }
}

2·到web.xml中去配置Filter的拦截路径


    <filter>
<!--        //给Filter器一个别名-->
        <filter-name>AdminFilter</filter-name>
<!--配置Filter的全类名-->
        <filter-class>com.atguigu.filter.AdminFilter</filter-class>
    </filter>

<!-- filter-mapping配置filter过滤器的拦截路径   -->
    <filter-mapping>
<!--  filter-name表示当前的拦截路径给哪个filter使用      -->
        <filter-name>AdminFilter</filter-name>
<!--   url-pattern配置拦截路径     -->
        <url-pattern>/admin/*</url-pattern>
    </filter-mapping>

完整的用户登录

在上面的基础上在加一个HttpServlet的继承类

public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //解决乱码问题
        resp.setContentType("text/html;charset=UTF-8");


        String username=req.getParameter("username");
        String password=req.getParameter("password");

        if(username.equals("lisan")&&password.equals("1234")){
            req.setAttribute("user",username);
            resp.getWriter().write("登陆成功");
        }else{
            req.getRequestDispatcher("/login.jsp").forward(req,resp);
        }
    }
}

3·Filter的生命周期

Filter的生命周期包含几个方法

  1. 构造器方法
  2. init初始化方法
    第1,2步,在web工程启动时执行(Filter创建)
  3. doFilter过滤方法
    第3步,每次拦截到请求时,就会执行
  4. destory销毁
    第4步,停止web工程的时候,就会执行(停止web工程,也会销毁Filter过滤器)

4·FilterConfig类

1·获取filter的名称filter-name的内容
filterConfig.getFilterName();

2`获取在web.xml中配置的init-param参数
filterCinfig.getInitParameter();

3·获取ServletContext对象
filterConfig.getServletContext();

5·Filter的拦截路径

–精确匹配

<url-pattern>/target.jsp</url-pattern>

以上配置的路径,表示请求地址必须为:Http://ip:/工程路径名/target.jsp

–目录匹配

<url-pattern>/admin/*</pattern>

以上表示请求的地址必须为:http://ip:port/工程路径/admin/*

–后缀名匹配

<url-pattern>*.html</pattern>

以上表示请求的地址必须以html结尾才会拦截到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值