反饋已提交
網絡繁忙
企业往往会有多个报表平台或多个相关的平台,用户希望只登录一次就可以访问其他的系统,例如登录 OA 系统的同时登录报表系统,即将输入的用户名密码也发送到报表服务器进行认证,从而访问报表时不需要再次登录。
Ajax 登录方式天然支持跨域,故在 OA 系统的登录界面中直接通过 Ajax 将用户名密码发送到报表服务器进行后台验证,则可解决跨域单点登录问题。
注:FineReport10.0 兼容 FineReport9.0 的单点登录接口,可用老单点登录方式;但 FineReport10.0 集群环境不兼容 FineReport9.0 单点登录方式。
启动两个工程,端口号分别为 8075 和 8080,将新建 HTML 文件 sso.html 放到端口号为 8075 的工程下,访问http://localhost:8075/webroot/sso.html,登录成功后,在浏览器上新打开标签页,访问 8080 工程,自动登录成功。
1)本文示例准备的两个工程分别为:
本地工程,端口号为 8075
部署到 Tomcat 上的工程,端口号为 8080
Tomcat 服务器部署请参见:独立部署
2)启动两个工程。
1)新建 HTML 文件,代码如下所示:
注1:根据实际情况修改代码中的「访问 URL」、「用户名」、「密码」。
注2:内网环境中,下面代码引用的 jquery.min.js 文件无法生效,需下载 JS 文件到本地并修改对应的路径,具体步骤请参见:单点登录问题汇总 文档中的 2.4 节内容。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head> <meta charset="utf-8"> <title>10.0单点登录示例</title></head><script type="text/javascript" src="https://cdn.bootcss.com/jquery/1.9.1/jquery.min.js"></script><script type="text/javascript"> $(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; } }</script><body><button id="login">点击我登录</button><a id="wb1">点我访问GettingStarted.cpt</a> </body></html>
2)将 HTML 文件命名为sso.html,放到端口号为 8075 工程的%FR_HOME%/webapps/webroot文件夹下,如下图所示:
报错:
若不关闭「内容嗅探攻击防护」按钮,控制台会报错:跨源读取阻止(CORB)功能阻止了 MIME 类型为 text/plain 的跨源响应。
如下图所示:
具体解释:
当服务端出现response.addHeader('X-Content-Type-Options', 'nosniff');安全相应头,且未指定Content-Type为 JavaScript 类型时,jsonp 请求跨域资源时变出现如上 CORB 或拒绝解析的问题。本文 ajax 单点登录就是用的 jsonp ,所以关闭「内容嗅探攻击防护」按钮可以关闭 nosniff 配置,但可能出现其他安全问题。
1)以管理员身份进入端口号为 8075 工程的平台,点击「管理系统>安全管理」,关闭「内容嗅探攻击防护」按钮,如下图所示:
2)相同步骤关闭端口号为 8080 工程的「内容嗅探攻击防护」按钮。
效果如下图所示:
问题描述:
Ajax 跨域单点登录平台时,谷歌浏览器不生效,跳转到登录页。
原因分析:
谷歌浏览器最新版本(80.0)及以上修改了安全策略,因此单点登录会失败。
解决方案:
在谷歌浏览器地址栏中输入:chrome://flags/,然后在搜索框输入「SameSite」搜索并找到
「SameSite by default cookies」选项,右侧按钮选择「Disabled」,重启谷歌浏览器即可。如下图所示:
文 檔回 饋
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉