sso社区系统单点登录对接

使用原理

  • 1.1 社区系统点击进入被登录系统(psmp)时,传来的请求携带着session_id,psmp判断是否单点登录
  • 2.1(携带session_id) YES:则像社区系统发送请求验证该session_id,验证通过则直接进入首页,否则进入登录页面
  • 2.2(未携带session_id) NO:进入登录页面

注:社区系统和psmp的登录账号需要保持一致,否则无法登陆

具体实现

web.xml里面设置过滤器和分发器

过滤器

<filter>
    <filter-name>SessionFilter</filter-name>
    <filter-class>com.ztesoft.uboss.login.filter.SessionFilter</filter-class>
    <init-param>
        <param-name>ExcludeFile</param-name>
        <param-value>/callremoteservice.do,/mcallremoteservice.do,/Login.jsp,/Login_chongqizongzhi.jsp,/Login_version20.jsp,/UlepLogin.jsp,loginservlet.do,ssologin.do, ssoeventNum.do,ssoeventList.do,logout.jsp,Error.jsp, /modules/bpmn/flowdesigner/draw/showFlow.jsp,/modules/bpmn/flowdesigner/draw/showView.jsp,/modules/bpmn/flowdesigner/draw/showFlow.jsp ,/modules/bpmn/flowdesigner/draw/showsubFlow.jsp,/modules/bpmn/flowdesigner/draw/flowActiviti.jsp,/modules/form ,modules/admin/report/release/reportTemplate.jsp,PreviewNotice.jsp,/sso.jsp
        </param-value>
    </init-param>
</filter>

servlet

<servlet id="Servlet_1172640229695">
        <servlet-name>loginservlet</servlet-name>
        <servlet-class>
            <!-- com.ztesoft.uboss.web.servlet.LoginServlet -->
            com.ztesoft.uboss.login.servlet.LoginServlet
        </servlet-class>
    </servlet>

<servlet-mapping id="ServletMapping_1172640229856">
        <servlet-name>loginservlet</servlet-name>
        <url-pattern>/loginservlet.do</url-pattern>
    </servlet-mapping>

SessionFilter

在doFilter()方法里面,加上一句判断

String session_id = request.getParameter("session_id");
if (!StringUtils.isBlank(session_id)) { // 单点登录方式
    String strWebRoot = getWebRoot(request);
    String curURL = "loginservlet.do?action=login&sessionID=" + session_id;
    response.sendRedirect(strWebRoot + curURL);
    filterChain.doFilter(request, response);
    return;
}

LoginServlet

在login()方法里面加上一句判断

// 天津一部单点登录
sessionId = request.getParameter("sessionID");
    String responseBody = "";
    if (StringUtil.isNotEmpty(sessionId)) {
        String url = ConfigurationMgr.instance().getString("SSO_URL");
        //String url ="http://10.45.8.27:8080/ccm/sso/entrance/sessionLoad?session_id=" + sessionId;
        if (StringUtil.isEmpty(url)) {
            SMSLoginState ssoResult = SMSLoginState.USRCODE_ERR;
            logger.info("LOGIN FAILED TO GET AUTH URL.");
            LoginUtil.gotoAnotherLink(request, response, ssoResult, loginJsp);
            return;
        }
        responseBody = callHttpClientRequest(url, sessionId);
        JSONObject jsonResponse = JSONObject.fromObject(responseBody);
        if (jsonResponse.getBoolean("success")) {
            ssoLoginUserCode = jsonResponse.getString("acc_login_name");
            //ssoLoginUserCode="imcp";
            // 代表sso登录成功
            if (StringUtil.isNotEmpty(ssoLoginUserCode)) {
                logger.debug("SSO Auth success. User Code: " + ssoLoginUserCode);
                loginDict.set("SSO_AUTH_SUCCESS_CODE", ssoLoginUserCode);
                loginDict.set("USER_CODE", ssoLoginUserCode);
                loginDict.set("SESSION_ID", sessionId);
                userCode = ssoLoginUserCode;
                loginDict.setValueByName("LOGIN_PATTERN", 0);
                loginServ.login(loginDict);
            }
        } else {
            SMSLoginState ssoResult = SMSLoginState.USRCODE_ERR;
            LoginUtil.gotoAnotherLink(request, response, ssoResult,
                loginJsp);
            logger.info("SSO AUTH FAILED.");
            return;
        }
    } else {
        loginServ.login(loginDict);
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,457评论 19 139
  • 本文包括:1、Filter简介2、Filter是如何实现拦截的?3、Filter开发入门4、Filter的生命周期...
    廖少少阅读 7,501评论 3 56
  • 一、什么是单点登录? 单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在...
    yljava阅读 12,455评论 0 13
  • 原文出处:单点登录原理与简单实现 一、单系统登录机制 1、http无状态协议 web应用采用browser/ser...
    程式怪客阅读 1,601评论 2 24
  • 有朋友曾问我 “金融行业从业4年,做事期间我尽量把自己做的事情做到最好,总觉得自己学到了点什么,但是别人问我,我却...
    y_eeec阅读 380评论 1 3

友情链接更多精彩内容