博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Xss过滤,只json型数据过滤,图片文件不过滤,采用jsoup
阅读量:5045 次
发布时间:2019-06-12

本文共 2544 字,大约阅读时间需要 8 分钟。

package com.huaji.fes.filter;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletRequestWrapper;

import org.jsoup.Jsoup;

import org.jsoup.safety.Whitelist;

public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {

  public XssHttpServletRequestWrapper(HttpServletRequest request) {
    super(request);
  }
  @Override
  public String getParameter(String name) {
    return clearXss(super.getParameter(name));
  }

  @Override
  public String getHeader(String name) {
    return clearXss(super.getHeader(name));
  }
  @Override 

  public String[] getParameterValues(String name) {

    String[] values = super.getParameterValues(name);
    if (values == null) {
      return null;
    }
    String[] newValues = new String[values.length];
    for (int i = 0; i < values.length; i++) {
      newValues[i] = clearXss(values[i]);
    }
    return newValues;
  }
/**
* 处理字符转义
* @param value
* @return
*/
private String clearXss(String value) {
  if (value == null || "".equals(value)) {
    return value;
  }
  return Jsoup.clean(value, Whitelist.basic());
  }
}

自定义过滤器

package com.huaji.fes.filter;

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.StringUtils;

import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

import com.jfinal.kit.StrKit;

public class XssFilter implements Filter {

private CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();

  @Override

  public void destroy() {

  }

  @Override

  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    throws IOException, ServletException {
    String contentType = request.getContentType();
    if (StrKit.notBlank(contentType) && contentType.contains("multipart/form-data")) {// 文件上传请求 *特殊请求
      MultipartHttpServletRequest multiReq = multipartResolver.resolveMultipart((HttpServletRequest) request);
      request = multiReq;// 将转化后的reuqest赋值到过滤链中的参数 *重要
    }
    chain.doFilter(new XssHttpServletRequestWrapper((HttpServletRequest) request), response);// 对request和response进行过滤
  }

  @Override

  public void init(FilterConfig arg0) throws ServletException {

  }

}

 

转载于:https://www.cnblogs.com/dmyglf/p/8118891.html

你可能感兴趣的文章
次序+“选择不重复的记录”(3)——最大记录
查看>>
Codeforces 450 C. Jzzhu and Chocolate
查看>>
[Unity3D]Unity3D游戏开发MatchTarget的作用攀登效果实现
查看>>
ACdream 1115 Salmon And Cat (找规律&amp;&amp;打表)
查看>>
JSON、JSONP、Ajax的区别
查看>>
AngularJS学习篇(一)
查看>>
【转载】 IP实时传输协议RTP/RTCP详解
查看>>
关于Xshell无法连接centos6.4的问题
查看>>
Linux系统的数据写入机制--延迟写入
查看>>
css3动画——基本准则
查看>>
javaweb常识
查看>>
Java注解
查看>>
时间>金钱
查看>>
元数据元素
查看>>
Visual Studio Code 构建C/C++开发环境
查看>>
web自己主动保存表单
查看>>
一个小的日常实践——高速Fibonacci数算法
查看>>
创建与删除索引
查看>>
java的基本数据类型
查看>>
机器学些技法(9)--Decision Tree
查看>>