栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

filter理解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

filter理解

文章目录
  • Filter的理解
    • filter写法
      • 1.接口创建
      • 2.配置映射关系
      • 3.filter的周期
    • filter的作用
      • 应用方面
    • 多个过滤器的执行先后问题
    • 多个过滤器的执行先后问题

Filter的理解

javaweb三大组件:servlet,filter过滤器,listener监听器

filter写法 1.接口创建
public class MyFilter implements Filter {
	public MyFilter() {
	}
	public void destroy() {
	}
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
	}

	public void init(FilterConfig fConfig) throws ServletException {
	}

}
2.配置映射关系

filter标签部分定义使用的过滤器,filter-mapping标签告诉服务器把哪些请求交给过滤器处理。这里的/表示所有请求,/表示根路径,(星号)代表所有请求,加在一起就变成了根路径下的所有请求。


		MyFilter
		com.dyz.filter.MyFilter
	
	
		MyFilter
		*.jsp
	
3.filter的周期
public class MyFilter implements Filter {

	public MyFilter() {
		System.out.println("实例化Filter");
	}
	
	public void destroy() {
		System.out.println("销毁Filter");
	}
	
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		System.out.println("进入doFilter");

//		chain.doFilter(request, response);//放行
	}

	public void init(FilterConfig fConfig) throws ServletException {
		System.out.println("初始化Filter");
	}

}
filter的作用
  • 它使用户可以改变一个 request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开 servlet时处理response.换种说法,filter其实是一个”servlet chaining”(servlet 链).
应用方面

例如:用filter控制用户访问权限

public class SecurityFilter implements Filter { 
	public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException, ServletException {     
	HttpServletRequest req = (HttpServletRequest) request;    
	HttpServletResponse res = (HttpServletResponse) response;    
	HttpSession session = req.getSession();
	if (session.getAttribute("username") != null) {        
		chain.doFilter(request, response);    
	} else {        
		res.sendRedirect("../failure.jsp");    
	} 
}

出于信息安全和其他一些原因的考虑,项目中的一些页面要求用户满足了一定条件之后才能访问(让用户输入帐号和密码),如果输入的信息正确就在session里做一个成功的标记,这里的成功标志就是session中的username有值;其后在请求保密信息的时候判断session中是否有已经登录成功的标记,存在则可以访问,不存在则禁止访问。

得到了http请求之后,可以获得请求对应的session,判断session中的username变量是否为null,如果不为null,说明用户已经登录,就可以调用doFilter继续请求访问的资源。如果为null,说明用户还没有登录,禁止用户访问,并使用页面重定向跳转到failure.jsp页面显示提示信息。

多个过滤器的执行先后问题

如果为注解配置,按照类名的字符串大小决定先后

web.xml配置:谁在上方谁先执行

执行时按照栈的数据结构先进后出,即先进后结束进程。

多个过滤器的执行先后问题

如果为注解配置,按照类名的字符串大小决定先后

web.xml配置:谁在上方谁先执行

执行时按照栈的数据结构先进后出,即先进后结束进程。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/868034.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号