読者です 読者をやめる 読者になる 読者になる

かとじゅんの技術日誌

技術の話をするところ

認証用Aspectについて

http://d.hatena.ne.jp/j5ik2o/20070223/1172204878

の独自インターセプタを作るという部分で,Aspectアノテーションを使ってLoginInterceptorを割り当てていたのですが,これはHOT deploy時しか正常に動作しないことに気付きました...orz

public class TopPage {

  // ページを開くとき一度だけ呼ばれるメソッド。
  // このメソッドにLoginInterceptorを割り当てて認証チェックさせます。
  @Aspect("LoginInterceptor")
  public String initialize() {
    return null;
  }

}

Seasar-user MLでid:koichikさんにアドバイスをいただきなんとかCOOL deployで動作できるようになりました.

で,COOL deployでもちゃんと動作するようにするには,Aspectアノテーションを削除して(Aspectアノテーションで指定してしまうとLoginInterceptorがシングルトンになるんでしょうね.きっと),customize.diconに以下の設定を追加します.

<component name="loginAspectCustomizer" class="org.seasar.framework.container.customizer.AspectCustomizer">
	<property name="useLookupAdapter">true</property>
	<property name="pointcut">"initialize"</property>
	<property name="interceptorName">"loginInterceptor"</property>
	<initMethod name="addClassPattern">
		<arg>"jp.grandtech.app.web"</arg>
		<arg>".*Page"</arg>
	</initMethod>
	<initMethod name="addIgnoreClassPattern">
		<arg>"jp.grandtech.app.web"</arg>
		<arg>".*LoginPage"</arg>
	</initMethod>
</component>
<component name="pageCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
	<initMethod name="addCustomizer">
		<arg>loginAspectCustomizer</arg>
	</initMethod>
	<initMethod name="addCustomizer">
		<arg>pageSupportAspectCustomizer</arg>
	</initMethod>
</component>

まず,loginInterceptor用のカスタマイザ loginAspectCustomizerの設定を作ります.
ここでは,useLookupAdapterがtrueになるように設定し,pageCustomizerのチェインに,loginAspectCustomizerを追加するようにします.
これで,HOT deployだけでなく,COOL deployでも正常に動作可能になります.