單點登錄實現Ajax登錄

<!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。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章