v3で解決されるみたいだけど、取り敢えず今はv2.1を使っているのでメモ。
てか、これはさすがに、ちょい問題あるバグと思う…GlassFish に変えたら DoCoMo のユーザがみんなログイン出来なくなっちゃった…みたいになるわけだから…。
コメント頂きました。v2.1でも修正されているようです。
MySQL で 流れたクエリを見たりログを取るにはどうすれば?って話。
そもそも、以前会社で Microsoft SQL Server を使わされてた。で、それにはプロファイラ ってプログラムが同梱されてて、それを使えば出来た。Windows の [スタートメニュー] から [すべてのプログラム] と辿っていくだけで見つかるのでメチャ分かり易い所にある。 (とは言え会社では新人研修で習わないツールは皆使わないので意味無いけど…) で、MySQL でも当然出来るはず〜と思って調べたら…なかなか出てこない。
どうも、 Enterprise 版なら分析ツールがついてくるらしいけど… Enterprize 版はお金の無い人は自力でビルドせなならん。で、金は無い!ビルド?ふん!根性はもっと無い!とふてくされていたら……発見!…運はあったみたい!
my.iniファイルの [mysqld] の後に mysqld を立ち上げる時に渡すパラメタを書けるのかな?なので、そこに log って一行を書き込めば、--log が渡され、machinename.logが MySQL のどっかのフォルダに出来るみたい。めでたし、めでたし。ちなみに、MySQL のマニュアルによると、このログはクエリがサーバに到着した時点で記録する、で、その他にも更新が完了する直前に書き込むバイナリログなんてのもある。なるほど…。
てか、そもそもなんでこんなにSQLのログ取りを熱心にしてたかというと、Glassfish で JDBC レルムによる認証を試してたんだけど、何故か認証されない。Glassfish はデータベースの管理者にすらパスワードを分からなくする MD5 等を使ったパスワードの照合をサポートするので、もしかしてその機能を殺せてないのか??とか思ったりして、流れてる SQL を調べようって事になったわけ…。
で、結局、調べて見たらユーザ名が違ってた、、、dummy と dumy。今時、パソコン初心者でも自分のユーザ名は忘れない…。なんにせよ、今は happy を haapy と間違えた知り合いを笑えない…。
glassfish 2.1 の asadmin start-domain からの応答が一切返ってこない…。全自動でサーバを立ち上げたい人達(おいらだけ?)の怒りのメモ。
結論から言えば、原因は分かったけど対策があるのかどうかは分からない。
ちなみに、以下はおいらが glassfish の開発コミュニティ宛に出したバグレポート。…今回も中学生レベルの英語で果たして通じるのだろうか…。合言葉は「コードは世界を繋ぐ共通言語」、ほれ!for(int i=0; i<3; i++) you.turn(); you.say("wan!"); …ちなみに
前回は、苦闘しながらも何とか通じた…果たして今回は? …異国の技術者達へ毎度毎度、本当にすみません。
どういうバグかの興味はあるけど、おまえの間違いだらけの英語なんぞ読めるか…という賢明な方々は、追記でまだマシなニホンゴを披露しているのでそちらを参照。
Java EE でのログイン処理について全然知らず、ちょっとはまったのでメモ。
まず、Java EE におけるログイン処理(認証)はどうも Java EE の仕様で標準化されている部分とそうでない部分があるみたい。なので、生真面目に JSR をいくら眺めてても全容は掴めないし、GlassFish や Tomcat のマニュアルと睨めっこしてても片手落ちになる。
どうも、こうした構成になっているのは、認証結果と認証用のインタフェースに関しては共通の枠組みで利用しよう、だけど認証の方法や個人データの扱いはコンテナのメーカ側にまかせよう…と言う事らしい。これによって、Kerberos 認証等の様々な認証に対応出来るっぽい…。
で、メモのため GlassFish のファイルレルムとフォーム認証の組み合わせを例に説明。
まず、Java EE で決められている部分。
- web.xmlの認証に関する部分
-
<security-constraint> <web-resource-collection> <web-resource-name>Authentication of FormAuth</web-resource-name> <url-pattern>/userOnly.jsp</url-pattern> </web-resource-collection> <auth-constraint> <role-name>testers</role-name> </auth-constraint> </security-constraint> <security-role> <role-name>testers</role-name> </security-role> <login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/login.jsp</form-login-page> <form-error-page>/login_err.html</form-error-page> </form-login-config> </login-config> - ログインページ(login.jsp)の一部
-
<body> <div>login</div> <form method="post" action="j_security_check"> <table> <tr> <td>ID</td> <td> <input type="text" name="j_username"/></td> </tr> <tr> <td>Pass</td> <td><input type="password" name="j_password"/></td> </tr> </table> <input type="submit" value="Login" name="submit"/> <input type="reset" value="Reset" name="reset"/> </form> </body>j_security等のj_で始まる名前はどうも予約されているみたい。
GlassFish 特有の部分
- ユーザとグループの追加
-
GlassFish の管理画面から[セキュリティ]→[レルム]→[file]→[ユーザ管理]
ユーザ(tester)とグループ(testers)を追加
※ 初期設定のままならデフォルトレルムは"file"になっているので上記設定だけで問題なし。(変更している場合は[セキュリティ]画面のデフォルトレルムから変更可能)
※ 上記作業は
asadmin create-file-userからも可能 - グループとロールを結びつける (sun-web.xml)
-
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Servlet 2.5//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd"> <sun-web-app error-url=""> <context-root>/web</context-root> <security-role-mapping> <role-name>testers</role-name> <group-name>testers</group-name> </security-role-mapping> </sun-web-app>
ちなみにおいらは最後の作業を忘れてはまった…。グループがロールの別名だと思ってたわけ。…すると"リクエストされたリソースへのアクセスが拒否されました"って403エラー!になるわけですなこれが…。ふぃ〜。


