继承 MappingJackson2HttpMessageConverter 后重写 read()实现 json 解密(改写)

2016-07-27 10:23:13 +08:00
 wysnylc
现在的问题是改写貌似有点问题,重写 writeInternal()进行 json 的加密倒是找到了 demo
其实我不是要加密解密,我是要过滤 json 里面的 xss 。
现在完成了 POST/GET 参数和 ResponseBody 的过滤,就差 RequestBody 的了,求指导,谢谢。
6702 次点击
所在节点    问与答
10 条回复
wysnylc
2016-07-27 10:53:07 +08:00
谷歌都收录了但是没人回我呀宝宝好可怜
wysnylc
2017-06-20 23:46:10 +08:00
我已经实现好了,你要么
shiwuxiwen
2017-06-21 15:50:50 +08:00
需要,这么发我的
shiwuxiwen
2017-06-21 15:53:17 +08:00
我 qq 767395949
shiwuxiwen
2017-06-21 15:53:26 +08:00
多谢,多谢。
shiwuxiwen
2017-06-22 10:23:51 +08:00
@wysnylc 有在不?
wysnylc
2017-06-23 17:22:16 +08:00
@shiwuxiwen 两天没上,不要急
package com.meadin.funding.service.support;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.util.MultiValueMap;
import org.springframework.web.servlet.handler.AbstractHandlerMapping;
import org.springframework.web.util.HtmlUtils;
import org.springframework.web.util.UrlPathHelper;

import com.meadin.funding.util.CollectionUtils;

/**
* 解决 @PathVariable 注解造成的 xss 攻击问题,注意:此类必需由 WebApplicationContext 初始化
*
* @author zhou
*
*/
public class XssHandlerMappingPostProcessor implements BeanPostProcessor{

@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException{
return bean;
}

@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException{
if(bean instanceof AbstractHandlerMapping){
AbstractHandlerMapping ahm = (AbstractHandlerMapping) bean;
ahm.setUrlPathHelper(new XssUrlPathHelper());
}

return bean;
}

static class XssUrlPathHelper extends UrlPathHelper{

@Override
public Map<String, String> decodePathVariables(HttpServletRequest request, Map<String, String> vars){
Map<String, String> result = super.decodePathVariables(request, vars);
if(!CollectionUtils.isEmpty(result)){
for(String key : result.keySet()){
result.put(key, cleanXSS(result.get(key)));
}
}

return result;
}

@Override
public MultiValueMap<String, String> decodeMatrixVariables(HttpServletRequest request,
MultiValueMap<String, String> vars){
MultiValueMap<String, String> mvm = super.decodeMatrixVariables(request, vars);
if(!CollectionUtils.isEmpty(mvm)){
for(String key : mvm.keySet()){
List<String> value = mvm.get(key);
for(int i = 0; i < value.size(); i++){
value.set(i, cleanXSS(value.get(i)));
}
}
}

return mvm;
}

private String cleanXSS(String value){
return HtmlUtils.htmlEscape(value);
}

}

}
代码就是这样,应该没错
18732907626
2019-03-01 09:57:09 +08:00
@wysnylc 老哥在吗,需要你的帮助,我后台也是用的 @RequestBody User user 来接收前台传的值,现在要过滤 XSS,需要你的指点,方便的话可以加我 QQ334911558 感谢
wysnylc
2019-03-01 11:07:43 +08:00
18732907626
2019-03-01 14:08:39 +08:00
@wysnylc 还是不行,配置上了,没反应。什么情况

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/295195

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX