えむけいのWeb Memo

iPhone、iOSアプリ開発、健康、社会に関するブログです

CSRF対策のtokenInterceptorサンプル

かなり手こずったのでメモしておく。
これからも使うはず。

<action name="hoge-hoge"
class="jp.co.hogehoge.action.HogeHogeAction">
    <interceptor-ref name="defaultStack"/>
    <interceptor-ref name="token">
        <param name="excludeMethods">register</param>
    </interceptor-ref>
    <result name="invalid.token">/WEB-INF/content/common/Error.jsp</result>
    <result name="success">/WEB-INF/content/HogeHoge.jsp</result>
    <result name="input">/WEB-INF/content/HogeHoge.jsp</result>
    <result name="appExec" type="redirect">hoge-check</result>
</action>


多分これでいけるはず。

何のことやらという感じだったので少しメモル。

・action nameでactionを指定して、tokenInterceptorを利用したいものを絞れる。action nameの書き方は小文字ハイフン。classにはしっかりと
・interceptor-refで利用するInterceptorを指定する。globalで指定していても、これで上書きされる可能性あり。注意。未検証

・interceptor-refはメソッドごとに指定できる。excludeMethodsは除外メソッド。何も書かなければすべてに適用
・tokenInterceptorの場合、invalid.tokenでtokenError時のページを指定

ついでにresultの例を書いておいた。基本はjspに飛ばすけど、最後のredirectのようにアクション側に飛ばすこともできる。

これらはstruts.xmlに記述すること。アクション側のannotationはまだ知らない。


最後にtokenInterceptorの場合、指定のformにを忍ばせる。これで上記のtokenInterceptorが利用可能。

全部に言えることだが、actionの指定法には注意。小文字なのかで結構はまった。



もっと体系的にstruts2を学んでみたい