四、测试页面
在proxy.test.com下部署个index.jsp,代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="org.jasig.cas.client.validation.*,org.jasig.cas.client.util.*,org.jasig.cas.client.*" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>client one</title>
</head>
<body>
sso cas client one !!! 单点登陆客户端一 <br>
<p>hello : ${_const_cas_assertion_.principal.name}</p>
<a href="http://backend.test.com/personal">个人中心</a>
</body>
<script type="text/javascript">
$={
isIE : /MSIE/i.test(navigator.userAgent),
json2str:function(o,f){
var r = [];
if(o===undefined || o===null) return "null";
if(typeof o =="string") return "\""+o.replace(/([\'\"\\])/g,"\\$1").replace(/(\n)/g,"\\n").replace(/(\r)/g,"\\r").replace(/(\t)/g,"\\t")+"\"";
if(typeof o == "object"){
if(!o.sort){
for(var i in o){
r.push((f?"\"" + i+"\":":i+":")+this.json2str(o[i],f));
}
if(this.isIE && !/^\n?function\s*toString\(\)\s*\{\n?\s*\[native code\]\n?\s*\}\n?\s*$/.test(o.toString))
r.push("toString:"+o.toString.toString());
r="{"+r.join()+"}";
}
else{
for(var i =0;i<o.length;i++)
r.push(this.json2str(o[i],f));
r="["+r.join()+"]";
}
return r;
};
return o.toString();
}
}
function showmsg(e){
alert($.json2str(e));
}
</script>
<%
String serviceUrl = "http://backend.test.com/test.do?jsback=showmsg";
final Assertion assertion=(Assertion)session.getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION);
final String proxyTicket = assertion.getPrincipal().getProxyTicketFor(serviceUrl);
request.setAttribute("serviceUrl",serviceUrl);
request.setAttribute("proxyTicket",proxyTicket);
%>
<script type="text/javascript" src="${serviceUrl}&ticket=${proxyTicket}"></script>
</html>
说明:1.http://backend.test.com/personal、http://backend.test.com/test.do两个接口多需要身份,一个返回页面,一个返回json
2.该页面测试重定向sso.test.com进行单点登陆
3.页面调用了backend service的一个接口,并将结果显示(cas2.0代理认证模式,此时用户并没有打开backend service)
4.点击“个人中心”进入backend service自动有身份(cas 1.0模式)