第三方系统单点登录到苍穹平台指定页面原创
7人赞赏了该文章
3,068次浏览
编辑于2022年05月26日 10:49:24
需求:外部系统需要点击指定链接跳转到苍穹指定的页面查看列表信息,在拿到第三方跳转信息时候需要到第三方系统认证中心鉴权(此处鉴权不做分享)
准备工作:第三方系统用户数据匹配
配置:MC配置,配置第三方系统登录
登录mc,路径:租户列表-选择租户-先取消“启用”-保存--点击数据中心-登录类型配置“第三方认证”-配置“认证插件”路径-启用数据中心-保存
插件地址后文将会提到
插件编写:
package kd.cfjt.service.sso; import kd.bos.login.thirdauth.ThirdSSOAuthHandler; import kd.bos.login.thirdauth.UserAuthResult; import kd.cfjt.util.auth.AuthUserUtil; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import static kd.bos.login.thirdauth.UserProperType.UserName; /** * @ClassName OtherSysSSOAuth * @Author zb * @Description TODO * @Date 2022/2/21 15:09 **/ public class OtherSysSSOAuth implements ThirdSSOAuthHandler { private static String ERROR_USER = "errorUser"; private static String SYS_INDEX_URL = "https://cfjt.kdcloud.com/login.html"; /** * @Author zb * @Description 该方法是用户没有登录的时候插件需要转移到正确的登录地址 * @Date 15:10 2022/2/21 * @Param [request, response, s] * @return void **/ @Override public void callTrdSSOLogin(HttpServletRequest request, HttpServletResponse response, String s) { //用户需要登录的地址 String loginUrl = SYS_INDEX_URL; try { response.sendRedirect(loginUrl); } catch (IOException e) { e.printStackTrace(); } } /** * @Author zb * @Description 该方法实现第三发插件认证及认证结果的返回 * @Date 15:10 2022/2/21 * @Param [httpServletRequest, httpServletResponse] * @return kd.bos.login.thirdauth.UserAuthResult **/ @Override public UserAuthResult getTrdSSOAuth(HttpServletRequest request, HttpServletResponse response) { //此处code为第三方系统提供的相关鉴权码,如果需要接收其他参数也可自行获取 String code = request.getParameter("code"); UserAuthResult result=new UserAuthResult(); result.setSucess(false); //这里编写自己的登录逻辑,判断是否登陆成功,并填写正确的返回类型和返回值 try { //去第三方平台获取openid String openId = AuthUserUtil.getOpenId(code); //去第三方平台获取userInfo,拿到用户名 String userName = AuthUserUtil.getUserName(openId); //测试直接进入通道,此处为方便测试编写的,传入这个code就直接给set一个用户名登录进去了,正式一定记得注释掉 if(code.equals("zb123")){ userName = "zhongb"; } if(userName!=null && userName != ERROR_USER){ //当前返回类型手机,用户名,email,工号 result.setUserType(UserName); result.setUser(userName); result.setSucess(true); }else{ response.sendRedirect(SYS_INDEX_URL); } } catch (IOException e) { e.printStackTrace(); } return result; } }
第三方跳转配置:
以跳转到指定列表页面为例:
https://xxxxxx.kdcloud.com/index.html?type=list&formId=bos_list&billFormId=er_layout_dailyreimburse&app=kdem&code=XXXXXXXX
code:第三方系统传入的,也可自行定义,在插件中接收即可
赞 7
7人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读