Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将HttpServletRequest参数编码为给定格式?_Java_Spring_Encoding_Filter_Xss - Fatal编程技术网

Java 如何将HttpServletRequest参数编码为给定格式?

Java 如何将HttpServletRequest参数编码为给定格式?,java,spring,encoding,filter,xss,Java,Spring,Encoding,Filter,Xss,我必须对HttpServletRequest参数进行编码,以避免XSS攻击 我正在尝试使用Spring提供的CharacterEncodingFilter 我在web.xml中有以下条目,但它似乎不起作用 <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEn

我必须对
HttpServletRequest
参数进行编码,以避免
XSS
攻击

我正在尝试使用
Spring
提供的
CharacterEncodingFilter

我在
web.xml
中有以下条目,但它似乎不起作用

<filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

编码滤波器
org.springframework.web.filter.CharacterEncodingFilter
编码
UTF-8
强制编码
真的
编码滤波器
/*
我已经问过其他问题了,但到目前为止运气不好

如果我从JSP页面为一个字段传递字符串,比如
“>
,它不会对其进行编码,我可以通过获取单个参数然后对其进行编码来实现,但我需要的是对整个应用程序进行单点编码。有什么线索,我错在哪里?或者更好的解决方案

编辑:-

XSSFilter代码:-

Map params = httpRequest.getParameterMap();
        Iterator i = params.keySet().iterator();
        Map result = new HashMap<String, String>();
        boolean valid = true;
        while (i.hasNext()) {
            String key = (String) i.next();
            String value = ((String[]) params.get(key))[0];
            if (!isValidInput(value)) {
                valid = false;
                result.put(key, "Invalid Input");
                logger.error("Invalid input in url " + httpRequest.getServletPath() + " for key : " + key + " value :" + value);

            }
        }
Map params=httpRequest.getParameterMap();
迭代器i=params.keySet().Iterator();
映射结果=新的HashMap();
布尔有效=真;
while(i.hasNext()){
字符串键=(字符串)i.next();
字符串值=((字符串[])params.get(键))[0];
如果(!isValidInput(值)){
有效=错误;
结果.输入(键,“无效输入”);
logger.error(“在url”+httpRequest.getServletPath()+”中输入的键:“+key+”值:“+value”无效);
}
}

它是否不适用于
POST
GET
仅测试POST。看一看,它说
字符编码过滤器设置正文编码,但不设置URI编码。
还看一看实际上我已经创建了一个公共过滤器XSSFilter(更新如上),它从请求和验证中获取参数,并在此过滤器之后将控制传输到Spring控制器。