启动两个工程,端口号分别为 8075 和 8080,将新建 HTML 文件 sso.html 放到端口号为 8075 的工程下,访问http://localhost:8075/webroot/sso.html,登录成功后,在浏览器上新打开标签页,访问 8080 工程,自动登录成功。
2.1 环境准备
1)本文示例准备的两个工程分别为:本地工程,端口号为 8075
部署到 Tomcat 上的工程,端口号为 8080
Tomcat 服务器部署请参见:独立部署
2)启动两个工程。
2.2 新建 HTML 文件
1)新建 HTML 文件,代码如下所示:
注1:根据实际情况修改代码中的「访问 URL」、「用户名」、「密码」。
注2:内网环境中,下面代码引用的 jquery.min.js 文件无法生效,需下载 JS 文件到本地并修改对应的路径,具体步骤请参见:单点登录问题汇总 文档中的 2.4 节内容。HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
10.0单点登录示例$(document).ready(function () {
$('#login').click(function () {
$.ajax({
url: 'http://localhost:8080/webroot/decision/login/cross/domain',
data: {'fine_username': '1', 'fine_password': '1', 'validity': -1},
dataType: 'jsonp',
callback: 'callback',
success: function (data) {
if(!data.errorCode) {
alert("登录成功");
} else{
alert("登录失败")
}
},
error: function () {
alert('登录失败');
}
});
});
$('#wb1').click(function () {
window.open('http://localhost:8080/webroot/decision/view/report?viewlet=demo/analytics/图表联动.cpt')
});
});
function setCookie(name, value) {
document.cookie = name + "=" + escape(value);
}
function getCookie(name) {
var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
if (arr = document.cookie.match(reg)) {
return unescape(arr[2]);
} else {
return null;
}
}
点击我登录
点我访问GettingStarted.cpt
2)将 HTML 文件命名为sso.html,放到端口号为 8075 工程的%FR_HOME%/webapps/webroot文件夹下,如下图所示:
2.3 关闭内容嗅探攻击防护按钮
2.3.1 原理
报错:
若不关闭「内容嗅探攻击防护」按钮,控制台会报错:跨源读取阻止(CORB)功能阻止了 MIME 类型为 text/plain 的跨源响应。
如下图所示:
具体解释:
当服务端出现response.addHeader('X-Content-Type-Options', 'nosniff');安全相应头,且未指定Content-Type为 JavaScript 类型时,jsonp 请求跨域资源时变出现如上 CORB 或拒绝解析的问题。本文 ajax 单点登录就是用的 jsonp ,所以关闭「内容嗅探攻击防护」按钮可以关闭 nosniff 配置,但可能出现其他安全问题。
2.3.2 具体步骤
1)以管理员身份进入端口号为 8075 工程的平台,点击「管理系统>安全管理」,关闭「内容嗅探攻击防护」按钮,如下图所示:
2)相同步骤关闭端口号为 8080 工程的「内容嗅探攻击防护」按钮。
2.4 效果查看
效果如下图所示: