BlazeDS+Tomcatでカスタム認証を行う場合の注意事項
随分前に発生した問題だが、あまり情報がなくハマってしまったので、今更ながら情報展開
「クライアントにFlex、クライアント-サーバ間の通信にBlazeDS、アプリケーションサーバにTomcat」
Flexを導入した場合、この組み合わせは非常によくある構成だろう。
しかし、上記組み合わせでカスタム認証を使用する場合は注意しなければならない。
環境の構築が不十分だと下のようなエラーが発生するかもしれません。
2009/10/21 11:15:23 org.apache.catalina.core.StandardWrapperValve invoke 致命的: サーブレット MessageBrokerServlet のServlet.service()が例外を投げました java.lang.NoClassDefFoundError: flex/messaging/security/TomcatLoginHolder at flex.messaging.security.TomcatLoginCommand.doAuthentication(TomcatLoginCommand.java:44) at flex.messaging.security.LoginManager.login(LoginManager.java:206) at flex.messaging.services.AuthenticationService.decodeAndLoginWithCharset(AuthenticationService.java:131) at flex.messaging.services.AuthenticationService.decodeAndLogin(AuthenticationService.java:95) at flex.messaging.MessageBrokerServlet.service(MessageBrokerServlet.java:276) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190) at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283) at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767) at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697) at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:889) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690) at java.lang.Thread.run(Thread.java:619)
解決方法
このエラーの解決方法は簡単です。
下にあるライブラリをTomcatが使用するライブラリに追加するだけ。
・flex-tomcat-common.jar
・flex-tomcat-server.jar
■Tomcat 6.0 の場合
・両jarファイルを [Tomcatのインストールディレクトリ]/lib 配下に置く
■Tomcat 5.0/5.5 の場合
・flex-tomcat-common.jar を [Tomcatインストールディレクトリ]/common/lib 配下に置く
・flex-tomcat-server.jar を [Tomcatインストールディレクトリ]/server/lib 配下に置く
これだけです。
「っでこのライブラリってどこにあるの?」と思った方がいるかもしれませんが、実は私も単体で配布している場所を知らないんですよね。。。
入手するだけなら、BlazeDSのFlexライブラリを取得したページに一緒に置いてある「BlazeDS turnkey」の中に同梱されています。
URL:http://opensource.adobe.com/wiki/display/blazeds/Downloads
ディレクトリ:blazeds-turnkey-x.x.x.xxxxx/tomcat/lib/blazeds
最後に注意として、
WebサーバにApacheを使用している場合、ApacheのBasic認証(基本認証)を使用した場合にも同様のエラーが発生します。