前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaEE 初级阶段-Filter 过滤器(三)

JavaEE 初级阶段-Filter 过滤器(三)

原创
作者头像
猎户星座1
修改2020-06-11 10:14:03
5160
修改2020-06-11 10:14:03
举报
文章被收录于专栏:Java StudyJava Study

Filter 过滤器

Filter为一个接口,要使用过滤器时,实现该接口 ,去实现接口中的方法,接口中的方法其实相比Servlet很简单,init(), doFilter(),destroy();创建初始化,过滤,销毁。

代码语言:txt
复制
public interface Filter {
    void init(FilterConfig var1) throws ServletException;

    void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException;

    void destroy();
}

看不出什么端倪来,点开 FilterChain

代码语言:txt
复制
public interface FilterChain {
    void doFilter(ServletRequest var1, ServletResponse var2) throws IOException, ServletException;
}

同样看不太出来 ,来看看他的使用方法,过滤器经常用做,过滤掉一些不希望用户不经过登录,授权就能访问和执行到的请求或页面。对指定的url 进行放行,对其他必须要登录能访问到url 进行禁止访问。

代码语言:txt
复制
//1.设置编码集
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		//2.进行拦截登录     强转为子类才能的得到

		HttpServletRequest    httpServletRequest = (HttpServletRequest)request;
		HttpServletResponse    httpServletResponse = (HttpServletResponse)response;
		//获得完整的访问路径
		String    path= httpServletRequest.getRequestURL().toString();
		//获得项目名字
		String projectName = httpServletRequest.getContextPath();
		//查找项目名字的索引+项目名字长度
		int index = path.indexOf(projectName)+projectName.length();
		//截取字符串,从上面的索引截取到结尾
		path = path.substring(index);
		//不需要拦截的登录界面,登录Servlet路径,注册老师的界面,注册老师的Servlet
		if(!path.startsWith("/datetimepicker")&&!path.startsWith("/css")&&!path.startsWith("/img")&&!path.startsWith("/js")&&!path.endsWith("index.jsp")&&!path.endsWith("insertTeacher.html")&&!path.endsWith("LoginTeacherServlet")&&!path.endsWith("InsertTeacherServlet")){
			HttpSession   session = httpServletRequest.getSession();
			Object  o = session.getAttribute("tid");
			//session中没有tid,代表没有登录过
			if(o==null){
//				去登录
				httpServletResponse.sendRedirect("index.jsp");
			}else{
				chain.doFilter(request, response);
			}
		}else{
			chain.doFilter(request, response);
		}

设置将css js 等资源放行,检查有没有登录,如果没有登录,(session中没有记录)则 返回登录界面。

chain.doFilter(request, response); 方法 该方法也就是接口中的doFilter方法,经过查阅,这个方法是是转向下一个过滤器的,一个个的过滤器是chain 连接起来的,讲这些请求发发向下一个过滤器

web.xml的配置形式,注意一般是拦截所有的/* 所有的请求。

代码语言:txt
复制
<filter>
    <filter-name>myFilter</filter-name>
    <filter-class>com.icss.student.util.MyFilter</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>myFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

会看到和Servlet 的配置方式非常 接近。

过滤器的声明周期

1.filter的init方法在容器初始化时加载。而servlet 是在请求控制的改url时再进行init()的

2.doFilter()方法

3.destory ()方法

每次访问url时,都调用一次 doFilter()方法。init()和destory()只执行一次。

代码语言:txt
复制
            有新认识再补充,欢迎留言👇,指出问题,互相讨论。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Filter 过滤器
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档