<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>Custom Login Page</title>
<script type="text/javascript" src="js/lib/jquery.js"></script>
</head>
<body>
<div>Custom Login Page</div>
<div>
username:<input id="username" name="username" value="nick"/>
password:<input type="password" id="password" name="password" value=""/>
<input type="button" id="login_btn" value="Login" name="Login"/>
<div id="cas_error_msg" style="display: block;"></div>
<div id="cas_error" style="display: none;"></div>
<div id="cas_tgt" style="display: none;"></div>
<div id="cas_st" style="display: none"></div>
</div>
<script type="text/javascript">
$(document).ready(function(){
//get redirect url after login
var curURL = window.location.href;
var curService = "";
if(curURL.indexOf('?') > 0){
curService = curURL.substring(curURL.indexOf('?') + 9);
}
//get Ticket Granting Ticket
$("#login_btn").click(function(){
var username = $("#username").val();
var password = $("#password").val();
$.ajax({
url: "v1/tickets",
dataType: "text",
type: "POST",
data: "username="+username+"&password="+password+"",
contentType: "application/x-www-form-urlencoded",
success:function(data){
$("#cas_tgt").html(data);
$("form input:first").val(curService);
$("form input:first").html(curService);
var action = $("form").attr("action");
var service = $("form input:first").val();
var data = "";
if(service != ""){
data = "service="+service+"";
}
//get Service Ticket
$.ajax({
url: action,
dataType: "text",
type: "POST",
data: data,
contentType: "application/x-www-form-urlencoded",
success:function(data){
$("#cas_st").val(data);
$("#cas_st").html(data);
//redirect to original url
var locationURL = $("form input:first").val() + "?ticket=" + $("#cas_st").val();
//console.log(locationURL);
window.location = locationURL
},
error: function(data){
console.log(data.responseText);
}
});
},
error: function(data){
console.log(data.responseText);
$("#cas_error").val(data.responseText);
$("#cas_error").html(data.responseText);
if("error.authentication.credentials.bad" == $("h3").text()){
$("#cas_error_msg").html("您提供的凭证有误");
}else if("error.authentication.credentials.bad.locked" == $("h3").text()){
$("#cas_error_msg").html("尝试次数太多,帐号被暂停使用,请联系管理员");
}else if("error.authentication.credentials.bad.change.pwd" == $("h3").text()){
$("#cas_error_msg").html("请先修改初始密码,然后再登录");
}else if("error.authentication.credentials.bad.invalid" == $("h3").text()){
$("#cas_error_msg").html("帐户不存在,或者帐户被禁用");
}else if("error.authentication.credentials.bad.sms" == $("h3").text()){
$("#cas_error_msg").html("您提供的手机验证码有误");
}else if("error.authentication.credentials.bad.multi.login" == $("h3").text()){
$("#cas_error_msg").html("您尝试太频繁,请休息五分钟后重试");
}else if("error.authentication.credentials.bad.pwd.risk" == $("h3").text()){
$("#cas_error_msg").html("您的密码存在风险,请修改密码后再登陆");
}else if("error.authentication.credentials.unsupported" == $("h3").text()){
$("#cas_error_msg").html("CAS不支持您提供的凭证");
}else{
$("#cas_error_msg").html("您提供的凭证有误!");
}
}
});
});
});
</script>
</body>
</html>
备注:
cas-server-3.5.2系统需要集成下面的jar包:
cas-server-integration-restlet-3.5.2.jar
com.noelios.restlet.ext.servlet-1.1.10.jar
com.noelios.restlet.ext.spring-1.1.10.jar
com.noelios.restlet-1.1.10.jar
org.restlet.ext.spring-1.1.10.jar
org.resetlet-1.0.jar
登录过程:
根据用户名、密码首先获取TGT(Ticket Granting Ticket);
然后根据返回的TGT获取ST(Service Ticket);
根据获取的ST登录需要访问的系统,系统url?ticket=ST。