struts2 tokensession 未在 Action excludedMethod 中设置请求
struts2 tokensession not setting request in Action excludedMethod
我正在尝试使用 tokenSession
避免重复提交问题。我的操作方法在没有 tokenSession
技术的情况下工作正常。
我在 upsert_crypto_sources.jsp
中添加了 <s:token/>
,在 struts.xml 中添加了 tokenSession 拦截器,但我在 list() 的操作 excludedMethod 中收到的请求为 null。
列表页面不需要避免双重提交问题,但是如果我在 view_crypto_sources_list.jsp
中添加 <s:token/>
并从 excludedMethod 中删除 list()
那么我总是会收到结果 invalid.token
.
我的 struts.xml 就像:
<struts>
<package name="key-manager" namespace="/shared/km" extends="console-default" strict-method-invocation="true">
<action name="manage_cs_*" method="{1}" class="console.shared.km.ASC_ManageCryptoProfilesAction">
<interceptor-ref name="tokenSession">
<param name="excludeMethods">
list, initInsert, load, delete
</param>
</interceptor-ref>
<result name="list">/shared/km/view_crypto_sources_list.jsp</result>
<result name="insert">/shared/km/upsert_crypto_sources.jsp</result>
<result name="update">/shared/km/upsert_crypto_sources.jsp</result>
<result name="load">/shared/km/upsert_crypto_sources.jsp</result>
<allowed-methods>list, insert, load, update, delete, testConnection, forward, cancel</allowed-methods>
</action>
我的操作实现了 ServletRequestAware
接口,因此它使用 setServletRequest()
方法获取请求成员变量集。
我添加了一个 defaultStack 拦截器,它工作正常:
<struts>
<package name="key-manager" namespace="/shared/km" extends="console-default" strict-method-invocation="true">
<action name="manage_cs_*" method="{1}" class="console.shared.km.ASC_ManageCryptoProfilesAction">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="tokenSession">
<param name="excludeMethods">
list, initInsert, load, delete
</param>
</interceptor-ref>
<result name="list">/shared/km/view_crypto_sources_list.jsp</result>
<result name="insert">/shared/km/upsert_crypto_sources.jsp</result>
<result name="update">/shared/km/upsert_crypto_sources.jsp</result>
<result name="load">/shared/km/upsert_crypto_sources.jsp</result>
<allowed-methods>list, insert, load, update, delete, testConnection, forward, cancel</allowed-methods>
</action>
我正在尝试使用 tokenSession
避免重复提交问题。我的操作方法在没有 tokenSession
技术的情况下工作正常。
我在 upsert_crypto_sources.jsp
中添加了 <s:token/>
,在 struts.xml 中添加了 tokenSession 拦截器,但我在 list() 的操作 excludedMethod 中收到的请求为 null。
列表页面不需要避免双重提交问题,但是如果我在 view_crypto_sources_list.jsp
中添加 <s:token/>
并从 excludedMethod 中删除 list()
那么我总是会收到结果 invalid.token
.
我的 struts.xml 就像:
<struts>
<package name="key-manager" namespace="/shared/km" extends="console-default" strict-method-invocation="true">
<action name="manage_cs_*" method="{1}" class="console.shared.km.ASC_ManageCryptoProfilesAction">
<interceptor-ref name="tokenSession">
<param name="excludeMethods">
list, initInsert, load, delete
</param>
</interceptor-ref>
<result name="list">/shared/km/view_crypto_sources_list.jsp</result>
<result name="insert">/shared/km/upsert_crypto_sources.jsp</result>
<result name="update">/shared/km/upsert_crypto_sources.jsp</result>
<result name="load">/shared/km/upsert_crypto_sources.jsp</result>
<allowed-methods>list, insert, load, update, delete, testConnection, forward, cancel</allowed-methods>
</action>
我的操作实现了 ServletRequestAware
接口,因此它使用 setServletRequest()
方法获取请求成员变量集。
我添加了一个 defaultStack 拦截器,它工作正常:
<struts>
<package name="key-manager" namespace="/shared/km" extends="console-default" strict-method-invocation="true">
<action name="manage_cs_*" method="{1}" class="console.shared.km.ASC_ManageCryptoProfilesAction">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="tokenSession">
<param name="excludeMethods">
list, initInsert, load, delete
</param>
</interceptor-ref>
<result name="list">/shared/km/view_crypto_sources_list.jsp</result>
<result name="insert">/shared/km/upsert_crypto_sources.jsp</result>
<result name="update">/shared/km/upsert_crypto_sources.jsp</result>
<result name="load">/shared/km/upsert_crypto_sources.jsp</result>
<allowed-methods>list, insert, load, update, delete, testConnection, forward, cancel</allowed-methods>
</action>