1

私は JSF と Spring Security を扱っています。カスタムログインページを使用しています。管理者とユーザーの 2 つの役割があります。私の質問は、役割ごとに異なるページにリダイレクトする方法です。たとえば、ユーザーが管理者の場合は「dashboard_Admin.jsf」にリダイレクトされ、単純なユーザーの場合は「dashboard_user.jsf」にリダイレクトされます。

これは私の春のセキュリティファイルです:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans 
                http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                http://www.springframework.org/schema/security 
                http://www.springframework.org/schema/security/spring-security-3.1.xsd">



<security:http auto-config="true" use-expressions="true">
    <security:intercept-url pattern="/pages/**"
        access="hasRole('ROLE_ADMIN')" />
    <security:form-login login-page="/login.jsf"
        authentication-failure-url="/login.jsf?error=true"
        default-target-url="/pages/admin/dashboard_Admin.jsf" />
    <security:logout logout-success-url="/login.jsf"
        delete-cookies="JSESSIONID" invalidate-session="true" />
    <security:session-management
        invalid-session-url="/login.jsf">
        <security:concurrency-control
            max-sessions="1" error-if-maximum-exceeded="true" />
    </security:session-management>
</security:http>


<security:authentication-manager alias="authenticationManager">
    <security:authentication-provider>
        <security:user-service>
            <security:user name="test" password="test"
                authorities="ROLE_USER" />
            <security:user name="sam" password="sam" authorities="ROLE_ADMIN" />
        </security:user-service>
    </security:authentication-provider>
</security:authentication-manager>

これは私の doLogin メソッドです:

 public String doLogin() throws ServletException, IOException {

    ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();

    RequestDispatcher dispatcher = ((ServletRequest) context.getRequest())
            .getRequestDispatcher("/j_spring_security_check?j_username=" + username
                            + "&j_password=" + password);

    dispatcher.forward((ServletRequest) context.getRequest(),
            (ServletResponse) context.getResponse());

    FacesContext.getCurrentInstance().responseComplete();

    return null;
}
4

1 に答える 1

0

Spring Security を使用しない非常に簡単な解決策を見つけましたが、非常にうまく機能します。ありがとうラヴィ

于 2013-05-03T16:53:53.923 に答える