0

私は持っています:

  1. Netbeans7.2のJavaEEWebアプリケーションプロジェクト。Shiro-Webがインストールされ、INIファイルの標準設定でうまく機能します。ユーザーは自動的に標準のlogin.jspページにリダイレクトされ、そこで問題なくログインできます。

が欲しいです:

  1. PrimeFacesタグで注釈が付けられたカスタムログインページlogin.xhtmlを作成するには、ログインプロセスはバッキングBeanによって処理されます。

私は欲しい:

  1. このログインBeanで実行する必要のある手順を理解する。現在、動作中のレルムが実装されており、ユーザーを認証できます。

    UsernamePasswordToken currentUserToken = 
       new UsernamePasswordToken(userEmail, userPassword);
    
    try {
        SecurityUtils.getSubject().login(currentUserToken);
    }
    catch(UnknownAccountException uae) {
    
        // TODO: Notify user that no such account exists
    }
    catch(IncorrectCredentialsException ice) {
        // TODO: Notify user that login attempt failed due to bad credentials
    }
    
    // TODO: How to set up user session an everything else, if login succeeded?
    

    ただし、ユーザーセッション(およびその他すべて)も適切に設定されていることを確認するには、どのような追加の手順を実行する必要がありますか?標準のShiroログイン機能(セッション設定、適切な設定設定など)を使用した場合と同じ状態にしたいと思います。

  2. 最終的に、ログインページでJSFタグを除外しないようにShiroを構成する方法を理解します。現在、レンダリングはデフォルトで標準HTMLに設定されており、すべてのグラフィック機能が表示されなくなります。

4

1 に答える 1

1

JSFはDefaultWebEnvironmentを処理するため、EnvironmentLoadListenerを拡張し、それにレルムを追加する必要があります。

public class CdiEnvironmentLoaderListener extends EnvironmentLoaderListener {

    //this is your implementation that extends Authorizing Realm
    ShiroRealm shiroRealm = null; 

    @Override
    protected WebEnvironment createEnvironment(ServletContext sc) {
        WebEnvironment environment = super.createEnvironment(sc);
        shiroRealm = new ShiroRealm();

        RealmSecurityManager rsm = (RealmSecurityManager) environment
            .getSecurityManager();

        HashedCredentialsMatcher matcher = new HashedCredentialsMatcher();
        matcher.setHashAlgorithmName(Sha512Hash.ALGORITHM_NAME);

        shiroRealm.setCredentialsMatcher(matcher);

        rsm.setRealm(shiroRealm);

        ((DefaultWebEnvironment) environment).setSecurityManager(rsm);

        return environment;
    }
}

web.xmlに、カスタムlistnerと、Webサンプルのデフォルトのフィルターおよびフィルターマッピングを追加します。

<listener>
    <listener-class>com.company.security.CdiEnvironmentLoaderListener</listener-class>
</listener>

カスタムJSF2.0タグライブラリを使用します。ここにあります http://deluan.github.com/shiro-faces/

ソース:

Apache Shiro "with JSF 2.0"!どうですか?

http://shiro-user.582556.n2.nabble.com/Shiro-in-CDI-JPA2-JSF2-project-td7577437.html

于 2012-10-07T18:25:23.287 に答える