1

JSPでWebサイトをプログラミングしています。閲覧するにはログインが必要なページがあります。ログインしていない場合は、ログイン フォームが表示されます。ユーザーがログインしているかどうかを確認する .jsp ページ (単一ファイル) を作成できる php コードを見てきました。そうでない場合は、ログインフォームが表示されます。ユーザーがログインしている場合、何も実行されません。そのために、JSP で次の構造を使用します。

ヘッダー、メニューなど...ログインしたユーザーに表示される本文、フッターなどの通常のもの。

この構造は、すべての Web ページに非常に簡単に適用できます。そのため、各 Web ページにチェック アルゴリズムを適用する必要はありません。この「」を追加するだけで、ページは安全です!

したがって、私の問題は、ユーザーがログインしていない場合、ログインフォームとフッターのみを表示する必要があることです。したがって、コードは本体をバイパスする必要があります。したがって、私のchecklogin.jspを次のように構成しました。

ユーザーがログインしていない場合は、ログイン フォームとフッターを表示し、リクエストを終了します。問題は、リクエストを終了する方法がわからないことです...「return;」を使用すると その後、checklogin.jsp のみが停止しますが、サーバーは親ページの処理を続行します。したがって、ページには 2 つのフッターがあります。(親ページから 1 つと checklogin.jsp から 1 つ)。どうすればこれを回避できますか?

(ちなみにこれには、php に exit(); があります!)

ご提案ありがとうございます。

編集 1: response.getOutputStream().close(); も試しました。しかし、うまくいかないようでした。

編集 2: PHP で必要なものに類似したものがあります: exit();

4

2 に答える 2

2

私の質問に対する答えは out.close(); です。これは単に応答を終了します。この問題に関する別の側面を指摘してくれた JB Nizet に感謝します。

于 2012-07-01T11:02:27.663 に答える
1

他のプログラミング言語で行うのと同じように行います。

<c:choose>
    <c:when test="userIsLoggedIn">
        normal header, body
    </c:when>
    <c:otherwise>
        login form
    </c:otherwise>
</c:choose>
footer

しかし、主な問題は、それをまったく行うべきではないということです。マークアップの生成には JSP を使用する必要があります。ユーザーがログインしているかどうかをチェックせず、結果に応じてページまたは別のページを表示します。適切な JSP にディスパッチするサーブレットで、Java でこれを行う必要があります。それがMVCパターンです。

そして、これはほとんどすべてのリクエストに対して実行する必要があるため、サーブレット フィルターでも実行する必要があります。フィルターは、サーブレットのように一連の URL にマップされ、これらの URL へのすべての要求をインターセプトします。したがって、フィルターはユーザーがログインしているかどうかを確認し、ログインしていない場合はログインページに転送またはリダイレクトします。ユーザーが認証されている場合、URL にマップされたサーブレット/JSP にリクエストを送信すること以外は何もしません。

フィルタの詳細については、たとえばhttp://www.oracle.com/technetwork/java/filters-137243.htmlを参照してください。

于 2012-06-30T15:12:21.890 に答える