- ベストアンサー
Tomcat7で指定URLのみクッキーを無効に
Tomcat7で指定URL時にアクセス時にのみクッキーを無効にする設定方法は ありますでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> 上記の処理の場合はログインしているかをSessionとDBまたはAppスコープオブジェクトを比較する方法に 変更し > ユーザーAがある処理を行った場合にユーザーB,ユーザーCのDBまたはAppスコープオブジェクト > の値を変更しログインしていない状態と判断するということでしょうか? そうです。 > 自分としては現在の認証処理をなるべく変更したくない為、ユーザーAが > 直接、ユーザーB,ユーザーCのSessionの値を変更または破棄しログインしていない状態と > 判断させたいのですがこちらは難しいでしょうか? それを作りこむほうが手間がかかります。 > ";jsessionid="SessionID等でユーザーB、ユーザーCになりすましSessionを取得し > 破棄を行おうとしたのですが やっと理解できました。コレがやりたくて、クッキーを無効にしたいということなのですね。 ユーザーAはユーザーB、CのSessionIDを知らないので、できません。 SessionIDを通知する仕組みを作成すると、結局は、 > ユーザーAがある処理を行った場合にユーザーB,ユーザーCのDBまたはAppスコープオブジェクト > の値を変更しログインしていない状態と判断する この処理を作ることになります。
その他の回答 (3)
- teketon
- ベストアンサー率65% (141/215)
> WEBシステムで同時にログインしている別ユーザーのセッションを破棄することが行いたいのです。 > ユーザーA、ユーザーB、ユーザーCのSessionが存在時にユーザーAがある処理を行った場合に > ユーザーB、ユーザーCのSessionを破棄し再度ログイン画面に 認証管理システムでよくある処理です。ほぼ定形なので、実装する処理は決まっています。 (1)ログイン処理でSessionを生成した際に、DBまたはAppスコープオブジェクトにUserIdとSessionIdを登録する。 (2)Filterを作成して、Sessionを持っているRequestの場合、DBまたはAppスコープオブジェクト内にエントリが存在するか、否かを確認する。 (2)-1.存在しない場合はSessionを破棄する。 (2)-2.存在する場合は、処理を継続する。 (3)HttpSessionListenerを実装して、Session破棄イベント時にDBまたはAppスコープオブジェクト内のエントリを削除する。 あとは業務アプリ側でDBまたはAppスコープオブジェクトを参照すれば、 ユーザA、ユーザーB、ユーザーCを確認できるので、操作する業務ロジックを作成するだけです。 多重ログインを許可する場合は、(1)と(2)にもう少し工夫が要りますが、大体こんな感じです。 さすがにTomcatの設定のみではできません。
- teketon
- ベストアンサー率65% (141/215)
> 実現したかったのは指定したURLにアクセスした場合に > クッキーのJSESSIONIDではなくurlのjsessionidを優先して使用したかったので > クッキーを無効にすればurlのjsessionidが使用されると思い、無効にする方法を質問 > させていただきました。 クッキーの破棄ではなく、URLにSessionIdを設定したいと認識しました。 (1)FilterでRequestのURLをチェックする。 (2)該当のURLを取得した場合、RequestからSessionを取得する。 (3)SessionからSessionIDを取得し、URLに";jsessionid="SessionIDを付与する。 (4)chainする。 クッキーにJSESSIONIDは付いたままですが、URLのjsessionidから取得できるはずです。 ただ、クッキーにSessionIDを付与するか、URLにSessionIDを付与するかは クライアントのクッキー受け入れ可否に依存するべき話です。 ですから、今までクッキーに付与していたのに、特定のURLへリクエストを投げると URLに付与するなんて方式の変換は、通常有り得ません。 まだ本当にやりたいこととずれている感じがしますね。
お礼
回答ありがとうございます。 質問する手順がおかしくなってしまい申し訳ありません・・・。 改めて質問させていただきます WEBシステムで同時にログインしている別ユーザーのセッションを破棄することが行いたいのです。 ユーザーA、ユーザーB、ユーザーCのSessionが存在時にユーザーAがある処理を行った場合に ユーザーB、ユーザーCのSessionを破棄し再度ログイン画面に TomcatのContextタグにcookies="false"を指定しクッキーを無効にした場合には ユーザーAが処理を行った後に自動遷移でユーザーB,CのSessionIdをURLに";jsessionid="SessionIDを付与 しSessionの破棄を行ったところ破棄することができたのですが クッキーが有効な場合はUrlにSessionIDを付与してもクッキーからユーザーAのSessionを取得してしまい、 ユーザーAのSessionの破棄してしまいました。 全てをクッキー無効にするのはあまり行いたくない為、指定URL(Session破棄用のページ)のみのクッキーを無効に しURLに";jsessionidを優先して使用したいということで質問させていただきました。 上記のような処理は業務ロジックで実装するべきことで、なりすましのように無理にSessionを破棄することは 好ましくないということは分かるのですが、方法があるのでしたらよろしくお願いします。
- teketon
- ベストアンサー率65% (141/215)
> Tomcat7で指定URL時にアクセス時にのみクッキーを無効にする設定方法は > ありますでしょうか? 日本語のレベルでちょっとわかりません。 Tomcatの設定だけでコントロールできるか?ならば、No Tomcat上のWebアプリでコントロールできるか?ならば、Yes Filterでチェックすればいい。
お礼
回答ありがとうございます。 質問が分かりづらくて申し訳ありませんでした。 実現したかったのは指定したURLにアクセスした場合に クッキーのJSESSIONIDではなくurlのjsessionidを優先して使用したかったので クッキーを無効にすればurlのjsessionidが使用されると思い、無効にする方法を質問 させていただきました。 Filterで実装可能ということで Filterでクッキーの破棄を行いましたがurlのjsessionidは使用されず、 新たにIDが発行されてしまいました。 クッキーの破棄ではなくクッキーを無効にすることも可能なのでしょうか?
お礼
回答ありがとうございます。 現在も認証処理は実装済みでSessionの値を確認しログインしているかを確認しています。 上記の処理の場合はログインしているかをSessionとDBまたはAppスコープオブジェクトを比較する方法に 変更し ユーザーAがある処理を行った場合にユーザーB,ユーザーCのDBまたはAppスコープオブジェクト の値を変更しログインしていない状態と判断するということでしょうか? 自分としては現在の認証処理をなるべく変更したくない為、ユーザーAが 直接、ユーザーB,ユーザーCのSessionの値を変更または破棄しログインしていない状態と 判断させたいのですがこちらは難しいでしょうか? ※ユーザーAの接続でユーザーB,ユーザーCのSessionを参照するというよりかは ";jsessionid="SessionID等でユーザーB、ユーザーCになりすましSessionを取得し 破棄を行おうとしたのですがクッキーが優先されてしまいユーザーAと認識してしまいました。