フィードバックの投稿先が不明なのでこちらに書きます。1) gsession3.war をダウンロードして、既存の apache+tomcat が稼働している環境の webapps に配置しました。2) その後、apache の ProxyPass の設定を追加して http://server1/gsession3/ でアクセスできるようにし、ブラウザで開くと Loading... の後で、ログイン画面が表示されました。3) この状態で、ユーザ admin パスワード admin でログインを行うと、以下の例外で終了してしまいます。java.lang.StringIndexOutOfBoundsException: String index out of range: -1 java.lang.String.substring(String.java:1937) jp.groupsession.v2.struts.AbstractGsAction.checkReferer(AbstractGsAction.java:900) jp.groupsession.v2.struts.AbstractGsAction.execute(AbstractGsAction.java:86) org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)(略)問題の処理は、 //サーバ名称が含まれているかをチェックする String refServerName = referer.toString(); int refererIndex = referer.indexOf("://"); if (refererIndex >= 0) { refServerName = refServerName.substring(refererIndex + 3); } if (referer.indexOf(":") >= 0) { refServerName = refServerName.substring(0, refServerName.indexOf(":")); } という部分の最後の substring なのですが、referer が "http://server1/gsession3/" の場合、refServerName は "server1/gsession3/" です。この状態で refere.indexOf(":") は 4 で refServerName.indexOf(":") は -1 なので、例外が出て当然だと思われます…。
apache+tomcatで運用しているという事ですので、> 2) その後、apache の ProxyPass の設定を追加して http://server1/gsession3/ でアクセスできるようにし、ブラウザで開くと Loading... の後で、ログイン画面が表示されました。apache の ProxyPass の設定は、下記のような設定になってますでしょうか?(ポート指定の記述をすれば、解決しそうな気がします。)ProxyPass ajp://internalserver:8009/gsession3/# なお internalserver は、tomcatの配置されているサーバ名です# ポート番号 8009 は、インストールガイドのとおりです。# 参照 http://www.gs.sjts.co.jp/v3/support/install_apache_tomcat.html
ProxyPass の設定は同様になっています。referer はブラウザから送られてくるデータですので、apache の設定は特には関係ないはずです。ログイン画面が正常に表示できるのは、ブラウザの URL 欄に直接 http://server1/gsession3/ と入力しているので、ブラウザから送られてくる referer が空になっているためであると思います。これに対して、ログインを実行すると referer は http://server1/gsession3/ になりますので、ダウンロードして確認したソースコードだと明らかに失敗します。ログイン画面に http://server1:80/gsession3/ として接続した場合、ブラウザが標準の 80 というポートを除去してしまうので同様のエラーになりました。Web ブラウザを使わずに強引にポート番号のついたリクエストを投げてみてもよいのですが、エラーが出ても出なくても結果画面の操作に問題がでるのと、実際の運用が不可能ということになってしまうので解決策にはならないかと思っています。十分な時間がとれたら修正&ビルドしてみてもよいのですが、ちょっと無理そうです。
GS Ver.3.5.3 で、修正していただけたようですよ。修正箇所: 下記の★の行。[GS Ver.3.5.3 で修正された内容] //サーバ名称が含まれているかをチェックする String refServerName = referer.toString(); int refererIndex = referer.indexOf("://"); if (refererIndex >= 0) { refServerName = refServerName.substring(refererIndex + 3); }★ if (refServerName.indexOf(":") >= 0) { refServerName = refServerName.substring(0, refServerName.indexOf(":"));★ } else if (refServerName.indexOf("/") >= 0) { refServerName = refServerName.substring(0, refServerName.indexOf("/")); }
vertical_align_top