在使用cas3的時候,每每有這樣的需求,但願每一個應用有個獨立的登陸頁面javascript
這塊cas 官方文檔有一些說明php
https://wiki.jasig.org/display/CAS/Using+CAS+without+the+Login+Screencss
首先從官方的角度,不建議使用多個登陸頁面,這樣對安全會造成短板。可是html
用戶需求之上,若是咱們要實現,有下面幾種方式java
1.經過參數來判斷css來改變佈局甚至一些圖片,典型cas裏面的default-view中web
casLoginView.jsp 裏面就有這樣的描述,經過描述能夠看出他經過不一樣css來區分安全
weblogin和mobilelogin。app
好比片斷jsp
<c:ifide
test="${not empty requestScope['isMobile'] and not empty mobileCss}">
<meta name="viewport"
content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<!--<link type="text/css" rel="stylesheet" media="screen" href="<c:url value="/css/fss-framework-1.1.2.css" />" />
<link type="text/css" rel="stylesheet" href="<c:url value="/css/fss-mobile-${requestScope['browserType']}-layout.css" />" />
<link type="text/css" rel="stylesheet" href="${mobileCss}" />-->
</c:if>
2.cas服務端(或者各類應用中)創建一個獨立的form頁面
參考:https://wiki.jasig.org/display/CAS/Using+CAS+from+external+link+or+custom+external+form
好比:
在cas(或者各類的應用頁面) web-inf/ 頁面添加testlogin.html
代碼:
<html>
<head />
<body>
<form method="GET" action="http://192.168.2.109:8080/cas/login">
<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="http://localhost/user/checklogintocas.php" />
</form>
</body>
</html>
casLoginView.jsp
實現自動提交功能:
...
<%@ page contentType="text/html; charset=UTF-8" %>
<%
String auto = request.getParameter("auto");
if (auto != null && auto.equals("true")) {
%>
<html>
<head>
<script language="javascript">
function doAutoLogin() {
document.forms[0].submit();
}
</script>
</head>
<body onload="doAutoLogin();">
<form id="credentials" method="POST" action="<%= request.getContextPath() %>/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>
</html>
<%
} else {
%>
<jsp:directive.include file="includes/top.jsp" />
...
<jsp:directive.include file="includes/bottom.jsp" />
<%
}
%>
3.第三種方法 實際上是第二種方法的啓發,直接把用if-else 把多個頁面組合在一塊兒,經過參數來判斷顯示。(最好能能夠支持多套casLoginView.jsp 不過研究下來好像比較難,也許cas開發者也是爲了怕再次開放的人用太多靈活的多套casLoginView.jsp 頁面跳來跳去把項目搞混吧。)