JavaWeb08_Filter 过滤器

Filter 过滤器

功能:
1、用来拦截传入的请求和传出的响应。
2、修改或以某种方式处理正在客户端和服务端之间交换的数据流。

使用示例:
与使用 Servlet 类似,Filter 是 Java WEB 提供的一个接口,开发者只需要自定义一个类并且实现该接口即可。

public class CharacterFilter implements Filter {

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		request.setCharacterEncoding("UTF-8");
		chain.doFilter(request, response);
	}

}
<filter>
	<filter-name>character</filter-name>
	<filter-class>com.blu.filter.CharacterFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>character</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

Filter 的生命周期

当 Tomcat 启动时,通过反射机制调用 Filter 的无参构造函数创建实例化对象,同时调用 init 方法实现初始化,doFilter 方法调用多次,当 Tomcat 服务关闭的时候,调用 destory 来销毁 Filter 对象。

Filter的调用顺序

同时配置多个 Filter时,Filter 的调用顺序是由 web.xml 中的配置顺序来决定的,写在上面的配置先调用,因为 web.xml 是从上到下顺序读取的。

使用注解简化 Filter 配置

注:使用注解方式配置 Filter 无法控制 Filter的调用顺序

@WebFilter("/*")
public class CharacterFilter implements Filter {

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		request.setCharacterEncoding("UTF-8");
		chain.doFilter(request, response);
	}

}

Filter的使用场景
1、统一处理中文乱码
2、屏蔽敏感词
3、控制资源的访问权限

屏蔽敏感词示例:

@WebFilter("/login")
public class WordFilter implements Filter {

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		String name = request.getParameter("name");
		name = name.replaceAll("敏感词", "***");
		request.setAttribute("name", name);
		chain.doFilter(request, response);
	}

}

访问权限控制示例:

@WebFilter("/download.jsp")
public class DownloadFilter implements Filter {

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		HttpServletRequest httpRequest = (HttpServletRequest) request;
		HttpServletResponse httpResponse = (HttpServletResponse) response;
		HttpSession session = httpRequest.getSession();
		String name = (String) session.getAttribute("name");
		if(name == null) {
			//不是登录状态
			httpResponse.sendRedirect("/login.jsp");
		}else {
			chain.doFilter(request, response);
		}
		
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值