Fileter
概念:
处于客户端与服务器目标资源之间的一道过滤技术
作用:
在访问目标资源文件之前,通过一系列的过滤器对请求进行修改、判断等,把不符合规则的请求在中途拦截或修改,也可以对响应进行过滤,拦截或者修改响应
比如:实现权限访问控制、过滤过敏词汇、压缩响应信息功能
实现步骤
Filter配置
配置方式一:web.xml
配置方式二:注解![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/555d26610f70d4e633b8bdd738db1392.png)
过滤器链
Filter优先级
过滤器参数配置
过滤器的典型应用
案例1:禁止浏览器缓存动态页面
@WebFilter(filterName = "CacheFilter" ,urlPatterns={
"*.jpg","*.png","*.css","*.html","*.js"})
public class CacheFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpServletResponse response= (HttpServletResponse)resp;
//缓存十分钟,对ie有效
response.setHeader("cache-control", "max-age=600");
response.setDateHeader("expires", System.currentTimeMillis() + 600000);
chain.doFilter(req, resp);
}
public void init(FilterConfig config) throws ServletException {
}
}
案例二、自动登录
步骤: ①首先浏览器向服务器请求login.jsp页面,服务器返回该页面的内容
②用户填写信息并选择自动登录或否,如果选择了自动登录就由servlet返回cookie中保存的登录信息给浏览器
③浏览器在下一次访问的时候直接携带cookie来就可以了
代码实现:
①登录界面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录</title>
</head>
<body>
<h1>登录页面</h1>
<form action="login" method="post" enctype="application/x-www-form-urlencoded">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="pwd"><br>
<input type="checkbox" value="自动登录" name="auto">
<input type="submit" value="登录">
</form>
</body>
</html>
②LoginServlet
package com.qf.controller;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Base64;
/**
* @author Administrator
* @Version v1.0
* @Date 2021/9/7 11:04
*/
@WebServlet(name = &#