原文章:SpringBoot防Xss攻击_springboot xss_谁不想飞舞青春的博客-CSDN博客
通过上述文章进行处理后,发现在Tomcat运行时已出现异常,排查后发现其XssFilter 需要补充实现init方法和destroy方法,不然tomcat运行war包会启动失败,记录下。如下所示
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
* XSS过滤器
*/
@Component
public class XssFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
/**
* 1. 重写getParamter方法
* 2. 在getParamter中判断属性,然后对特殊字符进行编码,使用官方提供的工具类.
* 3. 继续提交请求
*/
chain.doFilter(new XssHttpServletRequestWrapper(
(HttpServletRequest) request), response);
}
@Override
public void destroy() {
}
}
在着最近在实战过程中发现,拦截会对Json数据进行不友好处理,所以需要对json数据方形,我处理方式如下
public class XssStringJsonDeSerializer extends JsonDeserializer<String> {
@Override
public String deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
//判断是否为json格式,不是则进行处理
if(JSONUtil.isJson(jsonParser.getText())){
return jsonParser.getText();
}
return StringEscapeUtils.escapeHtml4(jsonParser.getText());
}
}
也可以用jsonParser.currentName()获取其字段名称进行单独过滤处理。