Interceptorのパラメータをオーバーライドする

Interceptorのパラメータを変えたい場合は Interceptor のインスタンスを別に名前を付けて作成する必要があると思っていたが、アクション定義中で変えることができるようだ。

こうやって

    <interceptor name="role_user"
   	 class="jp.co.hershe.struts2.acegi.AuthzInterceptor">
     	<param name="allowedRoles">ROLE_USER</param>
    </interceptor>

    <interceptor-stack name="default_user">
         <interceptor-ref name="some_interceptor"/>
         <interceptor-ref name="role_user"/>
         <interceptor-ref name="other_interceptor"/>
    </interceptor-stack>

こんなかんじで参照する必要があると思っていたが

    <action name="user_add" method="doAdd">
       <interceptor-ref name="default_user"/>
       :
    </action>

こういう

    <interceptor name="role_cehck"
   	 class="jp.co.hershe.struts2.acegi.AuthzInterceptor">
    </interceptor>

    <interceptor-stack name="default">
         <interceptor-ref name="some_interceptor"/>
         <interceptor-ref name="role_check"/>
         <interceptor-ref name="other_interceptor"/>
    </interceptor-stack>

paramのnameに Interceptor名.パラメータ名 を指定し値を設定する、このような形式でも書けるようだ(大量に書く場合はインスタンスが共用できる名前付きの方がベターだと思われる)

    <action name="user_add" method="doAdd">
       <interceptor-ref name="default">
         <param name="role_check.allowedRoles">ROLE_USER</param>
       <interceptor-ref>
       :
    </action>

※ちょっとTIPS:Interceptorを名前で参照するので同じインスタンスかと思ったがちゃんと別のインスタンスになっていた、したがってAction毎に別のパラメータを指定しても問題なく動作する