我们对getParameter()这个方法得到的参数进行敏感词过滤。
实现思路:利用过滤器拦截所有的路径请求同时在在过滤器执行的时候对getParameter得到的value值进行过滤。最后呢,到我们自己的实现的逻辑中呢?这个value值就被我们做过处理了。
1:自定义的过滤配置文件
把文件位置放在resource下的static目录下,内容如下
2:编写我们的过滤器
遇到的问题:拿取不到resource/static/sensitive.txt文件。好在解决了哈哈哈哈哈哈看代码吧!!!!
jdk代理的知识
@WebFilter("/*")
public class filtersensitive implements Filter {
ArrayList<String> list = new ArrayList<String>();
// 这种写法会报错,我也是醉了
// @Value("classpath:static/sensitive.txt")
// private Resource resource;
/**
* @param
* @method 初始化我们的过滤词的配置
*/
@Override
public void init(FilterConfig filterConfig) throws ServletException {
try {
String line;
//读取我们的过滤配置文件
File resource = ResourceUtils.getFile("classpath:static/sensitive.txt");
BufferedReader sensitivewords = new BufferedReader(new FileReader(resource));
//把读取到的信息,存放到list中
while ((line = sensitivewords.readLine()) != null) {
list.add(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* @param
* @method 这里只针对request中的getParameter方法进行敏感词过滤
*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) servletRequest;
HttpServletResponse resp = (HttpServletResponse) servletResponse;
//jdk动态代理的使用,我写过这个的文章哦
HttpServletRequest request = (HttpServletRequest) Proxy.newProxyInstance(
req.getClass().getClassLoader(),
req.getClass().getInterfaces(),
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//拦截getParameter方法
if ("getParameter".equals(method.getName())) {
//调用getParameter方法的到value
String values = (String) method.invoke(req, args);
//如果有getParameter的调用,则会进行过滤并且返回经过处理的返回值,其他的直接放行
if (values != null) {
//与我们初始化的list比较是否要过滤
for (String s : list) {
if (values.contains(s)) {
values = values.replaceAll(s, "*");
System.out.println("过滤成功");
}
}
}
return values;
} else {
return method.invoke(req, args);
}
}
});
//放行
filterChain.doFilter(request, resp);
}
@Override
public void destroy() {
}
}
3:注册过滤器
emmmm以前就是老是忘记注册了,哈哈哈哈哈哈最后气的半死
@Configuration
public class filterConfig {
/**
* @param
* @method 注册拦截器
*/
@Bean
public FilterRegistrationBean addMyFilter() {
filtersensitive filterSensitive = new filtersensitive();
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(filterSensitive);
filterRegistrationBean.addUrlPatterns("/*");
return filterRegistrationBean;
}
}
4:测试
emmm我们在这里写个爸爸哈哈哈哈
完了爸爸被屏蔽了,包括儿子,妈妈都是这样了,一家子整整齐齐的哈哈哈哈哈哈