2.具体操作步骤
1、编写JS脚本实现登录,核心脚本代码如下所示,surl为Smartbi登录成功后自动根据参数跳转的地址,furl是Smartbi登录失败后自动根据参数跳转的地址。
代码块 | ||||
---|---|---|---|---|
| ||||
<form method="POST" id="formLogin" onsubmit="go();return false">
<p>用户:<input type="text" name="user" size="20" value="admin"></p>
<p>密码:<input type="text" name="password" size="20" value="manager"></p>
<p>登录成功后的跳转地址:<input type="text" name="surl" size="20" value="manager"></p>
<p>登录失败后的跳转地址:<input type="text" name="furl" size="20" value="manager"></p>
<p><input type="submit" value="确定" name="B1"></p>
</form>
function go() {
formLogin.action = "http://localhost:18080/smartbi/vision/login.jsp";
formLogin.user.value = "admin";
formLogin.password.value = "manager";
formLogin.surl.value = " "; // 登录成功后的跳转地址;若该地址为外部链接,需要包含协议名,如以 http:// 开头
formLogin.furl.value = " "; // 登录失败后的跳转地址
formLogin.submit();
return true;
} |
2、前端登录后,需要有相应的注销代码,核心注销代码如下。
代码块 | ||||
---|---|---|---|---|
| ||||
<form method="POST" id="formLogout" onsubmit="go();return false">
<p>注销成功后的跳转地址:<input type="text" name="surl" size="20" value="manager"></p>
<p>注销失败后的跳转地址:<input type="text" name="furl" size="20" value="manager"></p>
<p><input type="submit" value="确定" name="B1"></p>
</form>
function go() {
formLogout.action = "http://localhost:18080/smartbi/vision/logout.jsp";
formLogout.surl.value = " "; // 注销成功后的跳转地址 为空时自动跳转到smartbi的index.jsp
formLogout.furl.value = " "; // 注销失败后的跳转地址 为空时自动跳转到smartbi的index.jsp
formLogout.submit();
return true;
} |
方法五:CAS单点登录
如果已有CAS服务器,要求进行CAS统一认证,可进行cas单点登录。参考“CAS单点登录”文档。
3、gif演示示例的源码请参考:在页面中使用Form登录.rar。
注意事项
- 如果不通过单点登录,那么在集成 Smartbi 资源时必须传入user、password 参数。
- 如果采用 Smartbi 的服务器端SDK方法进行单点登录,在集成资源时除了可以传递参数user、password之外,还可以单独传递参数smartbiCookie,此参数为从服务器端获取的cookie。获取此值的方法,见下面红色方框内代码。
- 如果Smartbi是集群部署模式,不能采用“方法三”进行单点登录,原因是ClientConnector对象是在jsp页面的java代码块中初始化的,其发起对象是第三方系统服务器,而集成资源是浏览器发起的,浏览器在使用该cookie时,不能保证跟服务器一样访问到同一个节点,在没有访问到同一个节点时,其cookie是无效的。
单点登录方式对比
上述提供的几种单点登录方式对比如下:
单点登录名称 | 方案简述 | 优点 | 缺点 | 适用系统 |
---|---|---|---|---|
LoginToken扩展包登录 | 在第三方系统中编写JSP 页面/Java代码调用Smartbi的服务器端SDK方法进行登录后获取Token再使用Token登录。 | token只能使用一次且60秒内有效,不会暴露用户的真实密码,支持集群,安全性高。 | 需要加载扩展包并修改登录验证类。 | 安全性要求高的系统。 |
页面中使用Form登录 | 在页面中提交form表单传递用户密码参数登录,并传递参数告知smartbi登录成功和失败跳转的地址。 | 集成方式简单。 | 用户名和密码暴露在前端,安全性差。 | 安全性要求不高的系统。 |
浏览器端SDK登录 | 通过JSLoader加载bof.usermanager.UserService的js方法登录。 | 简单方便,通用性高。 | 集成方式较麻烦,用户名和密码暴露在前端,安全性差,需要解决跨域问题。 | 安全性要求不高的系统。 |
服务器端 SDK登录 | 在第三方系统中编写 JSP 页面/Java代码调用 Smartbi 的服务器端 SDK获取Cookie进行登录。 | 不会暴露用户的真实密码,安全性高。 | 不支持集群部署,不支持从第三方系统链接转到Smartbi系统首页进行登录。 | 安全性要求高的系统,只适用于在第三方系统中打开和新建Smartbi资源以及在第三方中打开功能模块进行登录。 |
CAS单点登录 | 将Smartbi接入到统一登录认证平台进行登录。 | 安全性高,多系统集成时登录方便。 | 需要加载扩展包,需要修改扩展包配置文件和登录验证类。 | 用户已有CAS服务器的情况。 |
1. 若服务端未对传入的跳转url变量进行检查和控制,则可能会有人恶意伪造假地址,从而诱导用户跳转到恶意网站上。
因此,用户通过在 Smartbi 的“高级设置”中修改以下配置项“可重定向的URL配置",对furl以及surl的格式进行限制,跳转链接必须得符合预先设定的匹配规则。
例如,设置"equal"的值为“http://www.baidu.com”,表示当跳转链接等于符合该值时允许访问。
代码块 | ||||
---|---|---|---|---|
| ||||
# 可重定向的URL配置
# 初始值({"startWith":"","equal":""}),表示允许跳转到任意外部路径
# startWith:多个URL以','分隔,表示允许跳转到以其开头的外部路径
# equal:多个URL以','分隔,表示允许跳转到URL指定的外部路径
REDIRECTABLE_URL_CONFIGURATION={"startWith":"","equal":"http://www.baidu.com"} |
效果如下: