0

我正在构建一个应用程序,我在其中根据用户的角色授权用户。角色在 Ldap 中定义。我们拥有财务、云计算和销售三个角色。根据我们希望在成功登录时重定向到特定页面的角色。如果登录失败,它应该重定向到某个错误页面。

我在 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() 检查角色
              如果(是财务角色){
                  response.sendRedirect(getFinancialRedirectUrl());
              }
        }
    }
于 2012-11-01T16:57:17.513 回答
0

登录.xhtml

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

登录豆

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 回答