回到主页
回到主页

OAuth SSO单点登录集成

· 厦门艾科思报表平台系统管理
一、准备SDK等集成环境

将需要的jar文件拷贝至tomcat8\lib目录下

Linux版本对应目录

/opt/iReport365/tomcat8/lib

Windows版本对应目录

D:\ireport365\tomcat8\lib

二、登录页面跳转脚本

importPackage(java.util);

importPackage(org.apache.commons.lang);

var app = request.getParameter("app");

var redirectUrl = request.getParameter("redirectUrl");

if(!StringUtils.isEmpty(app) && StringUtils.equalsIgnoreCase(app, "crm")){

result.setSuccess(true);

var urlStr = "/view/user/sso.do?app="+app+"&redirectUrl="+redirectUrl;

logger.debug("url str: "+urlStr);

response.sendRedirect(urlStr);

}else{

//忽略SSO,默认跳转到登录界面

result.setSuccess(false);

}

三、SSO登录脚本

importPackage(java.util);

importPackage(java.net);

importPackage(org.apache.commons.codec.digest);

importPackage(org.apache.commons.lang);

importPackage(com.alibaba.fastjson);

var app = request.getParameter("app");

var redirectUrl = request.getParameter("redirectUrl");

logger.error("app: "+app);

logger.error("redirectUrl: "+redirectUrl);

if(!StringUtils.isEmpty(app) && StringUtils.equalsIgnoreCase(app, "crm")){

var SSO_HOST = "http://www.abc.com:9080";

var CLIENT_ID = "abcdef";

var CLIENT_SECRET = "";

var accessTokenKey = "access_token";

var accessToken = request.getParameter(accessTokenKey);

//accessToken如果是null,说明未登录

if (accessToken != null) {

logger.debug("accessToken:"+accessToken);

//获取用户信息

var oauthUrl = new StringBuilder().append(SSO_HOST).append("/auth/profile").toString();

var bearerClientRequest = new OAuthBearerClientRequest(oauthUrl).setAccessToken(accessToken).buildQueryMessage();

bearerClientRequest.setHeader("clientId", CLIENT_ID);

var oAuthClient = new OAuthClient(new URLConnectionClient());

var resourceResponse = oAuthClient.resource(bearerClientRequest, "GET", OAuthResourceResponse);

//解析用户信息

var status = resourceResponse.getResponseCode();

var body = resourceResponse.getBody();

logger.info("getUserProfileByToken", new StringBuilder().append("code:").append(status).append("body:").append(body).toString());

body = body.replaceAll("\\\\/", "/");

var obj = JSONObject.parseObject(body);

logger.debug("user profile:"+obj);

//获得用户名

var username = obj.getString("USER_LOGIN_NAME");

var redirectUrl = request.getParameter("redirectUrl");

logger.debug("redirectUrl: "+redirectUrl);

var hasUser = userService.hasUser(username);

if(!hasUser){

//redirect到错误消息提示

response.setContentType("text/html;charset=utf-8");

sessionService.putString("pageTitle", "登录失败");

sessionService.putString("message", "您的账号未与报表平台绑定,请联系管理员");

var urlStr = "/view/message.do";

response.sendRedirect(urlStr);

}else{

userService.loginUser(username);

response.sendRedirect(redirectUrl);

}

}else{

var uri = request.getRequestURI();

var callbackUrl = "#CURRENT_HOST#" + (uri.length() > 0 ? uri.substring(1) : "");

var queryString = request.getQueryString();

if (queryString != null) {

callbackUrl += "?" + queryString.trim();

} else {

callbackUrl += "?" + "clientID=" + CLIENT_ID;

}

logger.debug("callbackUrl: "+callbackUrl);

//redirect_url必须作为第一个参数

var url = "/sso_listener.html?redirect_url=" + URLEncoder.encode(callbackUrl, "utf-8") +"&client_id="+CLIENT_ID;

logger.debug("redirect to: "+url);

response.sendRedirect(url);

}

}else{

//redirect到错误消息提示

sessionService.putString("pageTitle", "登录失败");

sessionService.putString("message", "登录失败,请联系管理员");

var urlStr = "/view/message.do";

response.sendRedirect(urlStr);

}

上一篇
6. 许可证
下一篇
报表与用户集成
 回到主页
strikingly icon上线了提供技术支持
Cookie的使用
我们使用cookie来改善浏览体验、保证安全性和数据收集。一旦点击接受,就表示你接受这些用于广告和分析的cookie。你可以随时更改你的cookie设置。 了解更多
全部接受
设置
全部拒绝
Cookie设置
必要的Cookies
这些cookies支持诸如安全性、网络管理和可访问性等核心功能。这些cookies无法关闭。
分析性Cookies
这些cookies帮助我们更好地了解访问者与我们网站的互动情况,并帮助我们发现错误。
首选项Cookies
这些cookies允许网站记住你的选择,以提供更好的功能和个性化支持。
保存