出现的问题:在访问网站的路径后面加上 ?redirect:http://www.anonymous.com/ 可以直接通过网址重定向到指定的网站
解决的办法:
创建一个实体类继承DefaultActionMapper 来重写里面的一些方法
import org.apache.struts2.dispatcher.mapper.ActionMapping; import org.apache.struts2.dispatcher.mapper.DefaultActionMapper; import org.apache.struts2.dispatcher.mapper.ParameterAction; import javax.servlet.http.HttpServletRequest; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Set; public class MyDefaultActionMapper extends DefaultActionMapper { public void handleSpecialParameters(HttpServletRequest request, ActionMapping mapping) { Set uniqueParameters = new HashSet(); Map parameterMap = request.getParameterMap(); for (Iterator iterator = parameterMap.keySet().iterator(); iterator.hasNext();) { String key = (String) iterator.next(); if ((key.endsWith(".x")) || (key.endsWith(".y"))) { key = key.substring(0, key.length() - 2); } // -- jason.zhou 20130708 add start -- // if ((key.contains("redirect:")) || (key.contains("redirectAction:")) || (key.contains("action:"))) { return; } // -- jason.zhou 20130708 add end -- // if (!uniqueParameters.contains(key)) { ParameterAction parameterAction = (ParameterAction) this.prefixTrie.get(key); if (parameterAction != null) { parameterAction.execute(key, mapping); uniqueParameters.add(key); break; } } } } }
//重写完需求类之后注入到strtus.xml 配置文件中
<!-- 为修复struts2 s2-016、s2-017漏洞,重写DefaultActionMapper --> <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="myDefaultActionMapper" class="com.supersense.mw.action.MyDefaultActionMapper" /> <constant name="struts.mapper.class" value="myDefaultActionMapper" />
//重新启动项目,发现项目路劲后面拼接重定向和转向则无法实现跳转