解決struts2 攔截器修改request的parameters參數失敗的問題
struts2 攔截器修改request的parameters參數失敗
為瞭解決struts2的xss(跨站腳本攻擊)問題,我打算用struts2自帶的攔截器來過濾所有由request傳遞來的參數。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <!-- 配置一系列常量,非必須 --> <constant name="struts.i18n.encoding" value="UTF-8"/> <!-- constant name="struts.devMode" value="true"/ --> <constant name="struts.enable.DynamicMethodInvocation" value="false"/> <constant name="struts.objectFactory.spring.autoWire" value="auto"></constant> <constant name="struts.multipart.saveDir" value="/tmp"/> <package name="default" namespace="/" extends="struts-default, json-default"> <!-- 配置攔截器 --> <interceptors> <!-- 定義xss攔截器 --> <interceptor name="xssInterceptor" class="xx.xx.xx(此處填寫攔截器對應的類)"></interceptor> <!-- 定義一個包含xss攔截的攔截棧 --> <interceptor-stack name="myDefault"> <interceptor-ref name="xssInterceptor"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 這個必須配置,否則攔截器不生效 --> <default-interceptor-ref name="myDefault"></default-interceptor-ref> </package> </struts>
一開始我配置的攔截棧是這樣的
<interceptor-stack name="myDefault"> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="xssInterceptor"</interceptor-ref> </interceptor-stack>
發現我執行過濾的那個類被執行瞭,但是action中註入的值沒有更改
隻需要把順序換一下就好瞭。
修改指定攔截器的參數(Struts2)
<!-- 修改prepareInterceptor的alwaysInvokePrepare屬性值為false --> <interceptors> <interceptor-stack name="atzhu">//自定義的攔截器棧名。 <interceptor-ref name="paramsPrepareParamsStack"> <param name="prepare.alwaysInvokePrepare">false</param> </interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="atzhu"/>
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Java攔截器和過濾器的區別分析
- 詳解SpringMVC HandlerInterceptor攔截器的使用與參數
- 聊聊java 過濾器、監聽器、攔截器的區別(終結篇)
- axios 攔截器管理類鏈式調用手寫實現及原理剖析
- SpringMVC攔截器超詳細解讀