よんちゅBlog

― このブログは自分用のメモや日々の問題などを共有するためのものです ―

20121005185841 お知らせ:  2013/07/17 ブログデザインをリニューアルしました。

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を使用している場合、ApacheBasic認証(基本認証)を使用した場合にも同様のエラーが発生します。