0
点赞
收藏
分享

微信扫一扫

JavaWeb中的Fiter过滤器

Villagers 2022-04-03 阅读 79
java-ee

filter过滤器是Java EE的规范,作用是:拦截请求,过滤响应。

拦截请求的常见场景:

  • 权限检查。
  • 日志操作。
  • 事务管理。
  • 等等

演示fiter过滤器权限限制,只有登录后才有权限进行访问a目录下的资源 

代码:

//拦截器的实现类

public class FitlerServlet1  implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
      //拦截器的初始化方法
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
          //这个方法是进行拦截后的操作
        HttpServletRequest servletRequest1 = (HttpServletRequest) servletRequest;
        HttpSession session = servletRequest1.getSession();
        String id = session.getId();
        Object ssss = session.getAttribute(id);
        if (ssss!=null){
            //验证成功
        filterChain.doFilter(servletRequest,servletResponse);  
          servletRequest1.getRequestDispatcher("/a/a.jsp").forward(servletRequest,servletResponse);
        }else{
            //验证失败
            System.out.println("跳转到登陆页面");
        }
    }
    @Override
    public void destroy() {
    }
}



//登录信息验证的servlet
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        String id = session.getId();  //获取sessionId  来实现多用户登录
        String suername = req.getParameter("suername");
        String password = req.getParameter("password");
        if ("链接数据库的信息".equals(suername)&&"链接数据库的信息".equals(password)){
            //验证账号密码成功
            req.setAttribute(id,"验证成功");
        }

    }
}

 在web.xml中进行配置:


     <!--用于配置一个Filter过滤器-->
    <filter>
        <!-- 别名-->
        <filter-name>filter</filter-name>
        <!-- 过滤器地址-->
       <filter-class>com.atguigu.servlet.fitler.FitlerServlet</filter-class>
        <!--过滤器初始化的信息-->
        <init-param>
            <param-name>username</param-name>
            <param-value>root</param-value>
        </init-param>
    </filter>
    <filter-mapping>
         <!--  选择那个过滤器进行使用-->
        <filter-name>filter</filter-name>
        <!-- 要进行过滤的内容-->
        <url-pattern>/a/x.jsp</url-pattern>
    </filter-mapping>

 FilterConfig类

       是Filter的配置文件类,服务器每次创建Filter类的时候也会创建一个FilterConfig的类,这里包含了Filter过滤器的所有信息。

    直接上代码:

public FitlerServlet(){
      System.out.println("构造器方法");
  }
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("fitle初始化的方法");
        System.out.println(filterConfig.getFilterName());//是用来获取别名

        System.out.println(filterConfig.getInitParameter("username"));//是用来获取配置文件中指定的初始化参数
        System.out.println(filterConfig.getInitParameterNames());//是用来获取初始化参数的所有的名称和值,存放在一个集合中,遍历的时候一个一个的枚举出来
        ServletContext servletContext = filterConfig.getServletContext();//用来获取servletcontext对象


    }

FilterChain过滤器链

流程:
 

例一:

  

运行结果是:

 

例二:
  

运行结果是:
 

Filter过滤器链的执行顺序是 :

在多个Filter过滤器执行的时候,他们执行的优先级顺序是由他们在web.xml中从上到下的配置顺序来执行的。 

举报

相关推荐

0 条评论