我发现了Struts1框架的新问题。我需要从页面中过滤一些输入值,所以我编写了自定义过滤器来实现这一点。
它非常适用于没有Map到任何形式的单个参数。但是当它被Map到一些struts表单字段时,它不会得到参数。
有人知道怎么处理吗?
这是我的过滤器代码
public class XSSFillter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
chain.doFilter(new XSSRequest((HttpServletRequest) request), response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}
以及
public class XSSRequest extends MultipartRequestWrapper{
public XSSRequest(HttpServletRequest request) {
super(request);
}
@Override
public String[] getParameterValues(String name) {
String[] values = super.getParameterValues(name);
if(values == null){
return null;
}
String[] newValues = new String[values.length];
for(int index = 0; index < values.length; index++ ){
newValues[index] = XSSFilterUtil.removeXSSTokens(values[index]);
}
return newValues;
}
@Override
public String getParameter(String name) {
String value = super.getParameter(name);
return XSSFilterUtil.removeXSSTokens(value);
}
@Override
public String getHeader(String name) {
String value = super.getHeader(name);
return XSSFilterUtil.removeXSSTokens(value);
}
}
当然,我已经在web.xml中定义了它
我想这是最重要的部分之一。
if (isMultipart) {
parameterValue = multipartParameters.get(name);
} else {
parameterValue = request.getParameterValues(name);
}
所以有一次 parameterValue
是从 multipartParameters
,然后在一些临时文件中定义它们。我认为最好的方法是修改所有的请求参数,然后让它抛出struts1.3.8库。
2条答案
按热度按时间wwwo4jvm1#
经过两天的研究和试验,我找到了一些解决办法。我编写了定制的multipartrequesthandler
您还需要编写定制的requestprocessor,因为在验证之前,struts会将请求 Package 到multipartrequestwrapper
在struts配置中
仅此而已:)
lpwwtiir2#
我对这个非常生疏,但是actionform.reset方法(actionmapping,httpservletrequest)可能会给你想要的东西。
几年前,我不得不使用它来计算一些东西,然后在属性中Map,此时您应该可以访问所有请求参数。