在单点登录过程中,经常会遇到接入的系统需要使用不同的浏览器。比如OA使用chrome,邮件系统使用IE。针对不同情况我们一般要求客户统一浏览器。从网上找了几种方式来实现。
目前针对浏览器之间互相打开有3种建议:
1.客户不同版本的浏览器都安装在指定目录例如:
IE:C:\Program Files\Internet Explorer\iexplore.exe
FireFox: C:\Program Files (x86)\Mozilla Firefox\firefox.exe
chrome: C:\Program Files (x86)\TSBrowser\TSBrowserLauncher.exe
在系统跳转打开指定浏览器时根据默认路径打开浏览器
2.修改注册表
修改注册表信息,需要客户在第一次使用统一认证的时候修改注册表信息。然后在系统跳转的时候根据注册表信息调用不同浏览器。
要根据不同环境情况,进行修改注册表, 并且需要手动运行添加注册;在弹出IE窗口时,会弹出一个cmd的小黑窗口。
3.在电脑环境变量配置不同浏览器位置
需要用户在自己使用的电脑配置浏览器的位置,通过环境变量找到浏览器的位置后启动浏览器。
这几种方式都需要客户参与进来而且工作量也很大。 还有是通过代码来打开,第一种在js代码中打开,这种需要支持ActiveXObject
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<body onload="pmLogin();">
</body>
<script type="text/javascript">
function pmLogin(){
try {
var pmurl = "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe -url http://www.baidu.com";
var objShell= new ActiveXObject("wscript.shell");
objShell.Run(pmurl);
objShell = null;
window.opener=null;
window.open('','_self','');
window.close();
}catch(e){
alert(e);
alert("火狐浏览器安装路径不正确,请联系管理员将浏览器安装在C:\\Program Files\\文件夹中 !");
}
}
</script>
</html>
第二种是在jsp页面中嵌套java代码打开。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="utf-8"%>
<%@page import="java.io.IOException"%>
<%@page import="java.util.Map"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form>
<div>
<%
String firefox = "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe";
Map map = System.getenv();
for (Object key : map.keySet()) {
String value = (String) map.get(key);
System.out.println("key="+key+"--------》value="+value);
if (value.contains("firefox.exe")) {
firefox = value;
break;
}
}
try {
Runtime.getRuntime().exec(new String[]{firefox, "http://www.baidu.com?useId=test"});
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
%>
</div>
</form>
</body>
</html>
代码代开需要用户设置自己电脑中浏览器的位置,技术上就简单的多了。在用户第一次使用单点登录系统的时候引导客户设置每个系统所需浏览器的位置,并保存下来。存在问题是如果客户临时更换使用的电脑可能需要重新设置浏览器的位置。
上面的代码只是个demo,项目中需要根据实际情况进行分析。