0

スタック オーバーフローのヘッダーのようなものは、Java サーブレットでどのように管理されますか? ログインしている場合とログインしていない場合のヘッダーは異なりますが、サイトを検索して使用することはできます。

現在、単一のサーブレットを介してさまざまなリクエスト ハンドラにリクエストをディスパッチしています。これらのリクエスト ハンドラは、JSP に転送されます。ユーザーがログインしているかどうかを通知する属性を設定if else JSTLし、JSP などでブロックするロジックを各要求ハンドラーに実装する必要がありますか? コントローラーサーブレットでこれを管理する方法はありますか?

ログインしたユーザーを管理するために私が見たすべてのパターンは、ログイン/登録ページへのリダイレクトに頼っているように見えますが、サイトを使用するためにユーザーにログインを強制する全か無かのシステムは望んでいません。スタックオーバーフロー。

4

1 に答える 1

1

まず、ユーザー情報を保存する場所が必要です。データベースをセットアップして、Hibernate などを使用します。次に、その情報を使用してユーザーを指定し、ログインできるようにする方法が必要です。Spring Security をお勧めします。これら両方のフレームワークのチュートリアル/ガイドを入手できる個人的にお気に入りの Web サイトは Mkyong です。春のセキュリティに関するものhttp://www.mkyong.com/spring-security/spring-security-hello-world-example/

これは、私が取り組んだプロジェクトから認証されたユーザーを取得するコード サンプルです。この例には、データベースから取得されたユーザー オブジェクトがあります。

public static User currentUser() {
    if (SecurityContextHolder.getContext() != null && 
            SecurityContextHolder.getContext().getAuthentication() != null && 
            SecurityContextHolder.getContext().getAuthentication().getPrincipal() != null &&
            SecurityContextHolder.getContext().getAuthentication().getPrincipal() instanceof User) {
        //logger.debug(className, "currentUser", "User: " + SecurityContextHolder.getContext().getAuthentication().getPrincipal());
        return (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    } else {
        return null;
    }
}  

Jspでは、次のようになります

<c:if test="${esFn:currentUser() not null}">Your logged in!!!</c:if>

esFn はこのように functions.tld で定義された関数です

<function>
    <name>currentUser</name>
    <function-class>com.test.User</function-class>
    <function-signature>
        com.test.User currentUser()
    </function-signature>
</function>
于 2013-09-12T17:15:30.247 に答える