import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Component
// 过滤路径,过滤器名称
@WebFilter(urlPatterns ="/*", filterName ="testFilter")
public class TestFilter implements Filter {
@Override
public voidinit(FilterConfig filterConfig) throws ServletException {}// 过滤
@Override
public voiddoFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {// 获取request
HttpServletRequest request =(HttpServletRequest) servletRequest;// 获取response
HttpServletResponse response =(HttpServletResponse) servletResponse;// 创建脏话过滤规则
DirtyWordsHttpServletRequest dirtyWordsHttpServletRequest = new DirtyWordsHttpServletRequest(request);// 执行
filterChain.doFilter(dirtyWordsHttpServletRequest, response);}
@Override
public voiddestroy(){}// 内部类脏话过滤规则
class DirtyWordsHttpServletRequest extends HttpServletRequestWrapper {// 脏话字典、可以直接搜索脏话字典,然后通过io流进行读取和过滤
private String[] words ={"傻","滚","死"};// 构造方法
public DirtyWordsHttpServletRequest(HttpServletRequest request){super(request);}// 重写getParameter方法
@Override
public String getParameter(String info){// 获取传来的参数值
String value = super.getParameter(info);// 判断if(value == null)return"没有值";// 执行脏话转换for(String dword : words){if(value.contains(dword)) value = value.replace(dword,"**");}// 返回过滤有的值return value;}}}
2.在启动类开启注解注入bean全盘扫描脏话
@ServletComponentScan("com.wyh.unit.TestFilter")//开启脏话过滤
@org.springframework.boot.autoconfigure.SpringBootApplication
public class SpringBootApplication {
public staticvoidmain(String[] args){
SpringApplication.run(SpringBootApplication.class, args);}}
3.写一个方法进行测试
@RequestMapping("/zanghua")
@ResponseBody
public String test(HttpServletRequest request){return request.getParameter("info");}