0

私は、ユーザーの役割に基づいてユーザーを承認するアプリケーションを構築しています。ロールはLdapで定義されます。財務、クラウド、営業の3つの役割があります。役割に応じて、ログインが成功したときに特定のページにリダイレクトします。ログインに失敗した場合は、エラーページにリダイレクトされます。

私はspring-security.xmlに次のように書いています。別のページにリダイレクトできません。

 <beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans" 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.0.3.xsd">

    <http auto-config="true">
        <intercept-url pattern="/finance*" access="ROLE_FINANCE"  />

        <logout logout-success-url="/logout" />
        <intercept-url pattern="/cloud*" access="ROLE_CLOUD" />


        <logout logout-success-url="/logout" />
        <intercept-url pattern="/sales*" access="ROLE_SALES" />

        <!-- <form-login login-page="/login1" default-target-url="/login1"
            authentication-failure-url="/loginfailed" /> -->
        <logout logout-success-url="/logout" />
        <!-- <form-login login-page="/login.vtu" authentication-success-handler-ref="customHandler"
            authentication-failure-url="/login.vtu?error=true" default-target-url="/login.vtu"
            login-processing-url="/j_security_check"  />  -->
    </http>
 <authentication-manager>
         <ldap-authentication-provider 
           user-search-filter="(uid={0})"
           user-search-base="cn=worldAdmin"
           group-search-filter="(uniqueMember={0})"
           group-search-base="cn=worldAdmin"
           group-role-attribute="cn"
           role-prefix="ROLE_">
         </ldap-authentication-provider>
 </authentication-manager>

 <ldap-server url="ldap://localhost:12389/o=xyz" manager-dn="cn=xyzAdmin,cn=worldAdmin,o=xyz" manager-password="abc" /> 

</beans:beans>
4

2 に答える 2

0
  • authentication-success-handler-refを使用して、ユーザーロールに基づいて特定のページにリダイレクトします。(Spring Securityによると、authentication-success-handler-refはdefault-target-url(またはalways-use-default-target-url)と組み合わせて使用​​しないでください。実装は常に後続の宛先へのナビゲーションを処理する必要があるためです)

  • ログインに失敗したときにリダイレクトするには、authentication-failure-urlを使用します。

    <form-login login-page = "/ login.vtu" authentication-success-handler-ref = "customHandler"
            authentication-failure-url = "/ login.vtu?error = true" />

     <bean id = "customHandler" class = "xyzweb.handler.CustomHandler" />
    パブリッククラスCustomHandlerはSavedRequestAwareAuthenticationSuccessHandlerを拡張します{
       @オーバーライド
       public void onAuthenticationSuccess(HttpServletRequest request、HttpServletResponse response、Authentication authentication)
            IOException、ServletException{をスローします
              //authentication.getAuthorities()で役割を確認します
              if(isFinancialRole){
                  response.sendRedirect(getFinancialRedirectUrl());
              }
        }
    }
于 2012-11-01T16:57:17.513 に答える
0

login.xhtml

<h:head >
    <f:metadata>
      <f:event type="preRenderView" listener="#{loginBean.onPageLoad}"/>
  </f:metadata>
</h:head>

loginBean

public void onPageLoad(){
    Authentication auth = SecurityContextHolder.getContext().getAuthentication();
    if (!(auth instanceof AnonymousAuthenticationToken)) {
        try {
            FacesContext.getCurrentInstance().getExternalContext().redirect(url);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
于 2015-04-01T22:55:45.057 に答える