2016-05-16 309 views
1

早上好。CAS - 當憑據出錯時重定向到自定義登錄頁面

我已成功配置CAS SSO服務器和客戶端。但是,我想要更改CAS的配置以使用自定義登錄頁面。我跟着this教程做出這樣的配置,它就像一個魅力。但問題是,當我輸入無效憑證(錯誤的用戶名或密碼)時,它會嘗試重定向到CAS的默認登錄頁面;但是,它應該重定向到自定義外部登錄頁面。如果您幫助我瞭解如何在輸入錯誤的證書時將CAS重定向到其他頁面,我將非常感激。

這是我casLoginView.jsp

<%@ page contentType="text/html; charset=UTF-8" %> 
<html> 
<head> 
    <script type="text/javascript"> 

     function doAutoLogin() { 
      document.forms[0].submit(); 
     } 
    </script> 
</head> 
<body onload="doAutoLogin();"> 
    <form id="credentials" method="POST" action="https://externalsite.com/cas-server-webapp-4.0.0/login?service=<%= request.getParameter("service") %>"> 
     <input type="hidden" name="lt" value="${loginTicket}" /> 
     <input type="hidden" name="execution" value="${flowExecutionKey}" /> 
     <input type="hidden" name="_eventId" value="submit" /> 
     <input type="hidden" name="username" value="<%= request.getParameter("username") %>" /> 
     <input type="hidden" name="password" value="<%= request.getParameter("password") %>" /> 
     <% if ("true".equals(request.getParameter("rememberMe"))) {%> 
      <input type="hidden" name="rememberMe" value="true" /> 
     <% } %>  
     <input type="submit" value="Submit" style="visibility: hidden;" /> 
    </form> 
</body> 

這是我的外部自定義登錄頁面:

<form method="GET" action="https://externalsite.com/cas-server-webapp-4.0.0/"> 
    <p>Username : <input type="text" name="username" /></p> 
    <p>Password : <input type="password" name="password" /></p> 
    <p>Remember me : <input type="checkbox" name="rememberMe" value="true" /></p> 
    <p><input type="submit" value="Login !" /></p> 
    <input type="hidden" name="auto" value="true" /> 
    <input type="hidden" name="service" value="<%= request.getParameter("service") %>" /> 
</form> 

基本上我的外部登錄頁面發送憑據到CAS登錄頁面後者自動提交。但是,如果證書不正確,CAS將重定向到默認登錄頁面而不是我的外部登錄頁面。

問候。

+0

你可能會通過展示 – swa66

+0

由於一些相關的代碼,吸引更多的迴應,我添加了一些相關的代碼。 – Richard

回答

0

我通過更改login-webflow.xml文件上的轉換來解決了我的問題。我所做的就是創建一個新的動作狀態:

<action-state id="customFailedLogin"> 
    <evaluate expression="generateLoginTicketAction.generate(flowRequestContext)" /> 
    <transition on="generated" to="externalRedirection" /> 
</action-state> 

而這一次調用視圖狀態,這將用戶重定向到我的外部登錄頁面

<view-state id="externalRedirection" view="externalRedirect:#{requestParameters.callingUrl}&amp;error=true"/> 

(callingUrl是我創建了一個變量並與服務網址一起發送)。最後,我只是改變了句柄中的轉換身份驗證失敗

<transition on="AccountNotFoundException" to="customFailedLogin"/> 
<transition on="FailedLoginException" to="customFailedLogin"/> 

希望它對別人有幫助。

1

您需要更改cas-server-webapp中login-webflow.xml中的代碼。 代碼應更改如下:

<action-state id="handleAuthenticationFailure"> 
<!-- Comment FailedLoginException and AccountNotFoundException --> 
<!--<transition on="FailedLoginException" to="generateLoginTicket"/>--> 
<!--<transition on="AccountNotFoundException" to="generateLoginTicket"/>--> 
</action-state> 

地址:

<action-state id="customFailedLoginException"> 
    <evaluate expression="generateLoginTicketAction.generate(flowRequestContext)" /> 
    <transition on="generated" to="customFailedLoginExceptionView" /> 
</action-state> 

<view-state id="customFailedLoginExceptionView" view="externalRedirect:#{requestParameters.service}&amp;errorMsg=failedLogin"/> 

<action-state id="customAccountNotFoundException"> 
    <evaluate expression="generateLoginTicketAction.generate(flowRequestContext)" /> 
    <transition on="generated" to="customAccoundNotFoundExceptionView" /> 
</action-state> 

<view-state id="customAccoundNotFoundExceptionView" view="externalRedirect:#{requestParameters.service}&amp;errorMsg=notFound" /> 

現在,如果提交不存在的用戶名或密碼是錯誤的,你會得到一個響應網址一個名爲'errorMsg'的參數。

我還做了一個關於如何登錄cas與客戶端自定義登錄屏幕,而不是服務器登錄srceen的示例。你可以下載它
https://github.com/yangminxing/cas-custom-login-page

相關問題