统一认证(2)PC端

Pc端的统一认证

(1). 流程图

这里写图片描述

(2). Login.jsp认证通过跳转回原网页

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
    <%@ page import="com.sunrise.service.security.entity.SysPUser" %>
    <%@ page import="com.sunrise.framework.core.LoginUserSession" %>
    <%@ page import="com.sunrise.framework.core.ApplicationManager" %>
    <%@ page import="com.sunrise.framework.theme.ThemeFilter" %>
    <%@ page import="com.sunrise.framework.var.Var" %>
    <%@taglib prefix="r" uri="http://www.sunrisetech.com/rdcp/" %>
    <%
        String path = request.getContextPath();
        String basePath = request.getScheme() + "://"
                + request.getServerName() + ":" + request.getServerPort()
                + path + "/";
        basePath = basePath.substring(0,7)+basePath.substring(7).replace("//","/");
    %>
    <%
        SysPUser user = (SysPUser) session.getAttribute(LoginUserSession.UserSession_Key);
    %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html>
    <head>
        <base href="<%=basePath%>" />
        <link rel="shortcut icon" type="image/x-icon" href="pages/images/favicon.ico" media="screen" />
        <title><%=ApplicationManager.getSystemName() %>
        </title>
        <r:include resource="!rdcp/~/pages/base.jsp"/>
    <!--
        <link href="themes/fire/css/common.css" rel="stylesheet" type="text/css"/>
        <link href="themes/fire/css/top.css" rel="stylesheet" type="text/css"/>
        <link href="themes/fire/css/navigation.css" rel="stylesheet" type="text/css"/>
        <link href="themes/fire/css/projectbuttom.css" rel="stylesheet" type="text/css"/>
        <link href="themes/fire/css/btn.css" rel="stylesheet" type="text/css"/>
        -->
        <script type="text/javascript" src="!property/base/scripts/tabs/baseTabs.js"></script>
        <script type="text/javascript">
            //var currentMenu = null;
            var _MENU_OPEN_ARR=new Array();//存放已打开的菜单ID

            rdcp.ready(function () {

                //登录会话更新,60秒钟刷新一次
                setInterval(function () {
                    rdcp.request("!sys/security~java/UpdateSession", {}, null, {mask: false});
                }, 60000);

                rdcp.menuDefaults.menuBuilder = rdcp.menu.lowerNavMenuBuilder;

                //rdcp.menu("navi", "!sys/menu/~query/Q_USER_MENUS");

                addOpenedPageContainerTips(rdcp.id("openedList"), rdcp.id("opened_page_list"));

                openMenuMark(221);
                rdcp.menu.openPage(221, "首页", "pages/welcome.jsp", false);
                rdcp.request("!sys/menu/~java/UserMenu", {time: new Date().getTime()}, buildNavBar);
            });

            function buildNavBar(data) {
                var $container = rdcp.id("navi");

                $container.append($("<UL>"));
                rdcp.each(data['body'], function (idx) {

                    var menu_level_1 = this;
                    var $li = addMenu_level_1($container, menu_level_1);
                });
            }


            /**
             * 添加一级菜单到导航条
             *
             * @param $container 导航条ID
             * @param menu_level_1 一级菜单对象
             * @returns 一级菜单DOM对象
             */
            function addMenu_level_1($container, m) {
                var $ul = $container.find("ul");
                var $li = $("<LI>");
                var $a = $("<A>");
                $a.html(m.name);
                $li.append($a);
                $li.on("click", function () {
                    parent.left.loadMenu(m.id, 2);
                });
                $ul.append($li);

                return $li;
            }
            ;


            function addOpenedPageContainerTips($opener, $openedPagesContainer) {
                rdcp.tooltip($opener, {
                    content: $openedPagesContainer,
                    onShow: function () {
                        var t = $(this);
                        var state = t.tooltip('tip');
                        state.css({
                            left: $(this).position().left + $(this).width() - state.width() - 13,
                            top: $(this).position().top + $(this).outerHeight() + 8
                        });
                        state.find(".tooltip-arrow-outer").css('margin-left',
                                (state.width() / 2 - $(this).width() / 2) + "px");
                        state.find(".tooltip-arrow").css('margin-left', (state.width() / 2 - $(this).width() / 2) + "px");
                        t.tooltip('tip').unbind().bind('mouseenter',function () {
                            t.tooltip('show');
                        }).bind('mouseleave', function () {
                                    t.tooltip('hide');
                                });
                    }
                });
            }
            ;

            function refreshPage(id,title, herf, closable){

                if(!isExistOpenMenu(id)){
                    openMenuMark(id);
                    var $pageOpenerContainer_history = $("<DIV>");
                    $pageOpenerContainer_history.addClass("projectbuttom");
                    $pageOpenerContainer_history.on("mouseover", function () {
                        $pageOpenerContainer_history.addClass("projectbuttom_hover");
                    });
                    $pageOpenerContainer_history.on("mouseout", function () {
                        $pageOpenerContainer_history.removeClass("projectbuttom_hover");
                    });

                    var $openerA = $("<A>");
                    $openerA.attr("href", "javascript:void(0)");
                    $openerA.attr("id", "open_menu_"+id);
                    $openerA.css("width", "130px");
                    $openerA.html(title);
                    $openerA.on("click", function () {
                        //rdcp.id("main").hide();
                        rdcp.id("pageFrameContainer").hide();
                        loadPage(id,herf);
                        rdcp.id("body_page").show();
                    });
                    $pageOpenerContainer_history.append($openerA);

                    if (closable) {
                        var $closerA = $("<A>");
                        $closerA.attr("href", "javascript:void(0)");
                        $closerA.addClass("close");
                        $closerA.on("click", function () {
                            //关闭当前显示上一页面
                            $(this).parent().remove();
                            closeMenuMark(id);
                            //var $iframe = rdcp.id("page_frame_" + id);
                            //$iframe.prev().show();
                            //$iframe.remove();
                        });
                        $pageOpenerContainer_history.append($closerA);
                    }

                    rdcp.id("opened_page_list").append($pageOpenerContainer_history);
                }else{
                    parent.openMenuMark(id);
                }
                loadPage(id,herf);
            }

            /**
            *加载页面
            * @param id
            * @param herf
             */
            function loadPage(id,herf){
                clickMenuMark(id);
                rdcp.id("body_page").panel("refresh",herf);
            }

             /**
             *登记的打开的菜单,并从新对菜单排序
             * @param id
              */
            function openMenuMark(id){
                 //alert("id="+id);
                 if(isExistOpenMenu(id)){
                     delMenuOpenArr(id);
                 }
                 //alert(_MENU_OPEN_ARR.length);
                 _MENU_OPEN_ARR.push(id);
                 //alert("2="+_MENU_OPEN_ARR.length);
             }

            /**
            *点击菜单时,从新对菜单排序
            * @param id
             */
            function clickMenuMark(id){
                delMenuOpenArr(id);
                _MENU_OPEN_ARR.push(id);
            }

            /**
            *关闭菜单
            * @param id
             */
            function closeMenuMark(id){
                delMenuOpenArr(id);
                openMenuOpenLast();
            }

             /*
              *删除菜单标记
              *
              * @param id
              */
            function delMenuOpenArr(id){
                for(var i=0;i<_MENU_OPEN_ARR.length;i++){
                    if(_MENU_OPEN_ARR[i]==id){
                        _MENU_OPEN_ARR.splice(i,1);
                    }
                }
            }

            /*
             *  方法:Array.remove(dx) 通过遍历,重构数组
             *  功能:删除数组元素.
             *  参数:dx删除元素的下标.
             */
            /*Array.prototype.remove=function(dx)
            {
                if(isNaN(dx)||dx>this.length){return false;}
                for(var i=0,n=0;i<this.length;i++)
                {
                    if(this[i]!=this[dx])
                    {
                        this[n++]=this[i]
                    }
                }
                this.length-=1
            }*/

            function isExistOpenMenu(id){
                for(var i=0;i<_MENU_OPEN_ARR.length;i++){
                    if(_MENU_OPEN_ARR[i]==id){
                        return true;
                    }
                }
                return false;
            }

            function openMenuOpenLast(){
                document.getElementById("open_menu_"+_MENU_OPEN_ARR[_MENU_OPEN_ARR.length-1]).click();
            }
            function logout(){
                $.messager.confirm('确认退出', '确定要退出系统吗?', function (r) {
                    if (r) {
                        rdcp.request("DS_USER_LOGOUT", "", function () {
                            document.location.href = "";
                        });
                    }
                });
            }
        </script>

    </head>

    <body class="easyui-layout" style="border: 0px;">

    <div data-options="region:'north'" style="border:0px;min-height:100px;overflow:hidden">
        <div class="SR_headerBox">
            <div class="SR_headerLeft">
                <div class="SR_logo"></div>
            </div>
            <div class="SR_headerRight">
                <table cellpadding="0" cellspacing="0" border="0">
                    <tr>
                        <td>
                            <a href="javascript:void(0);" class="topLink1"><%=user.getName()%></a>
                        </td>
                        <!--<td><a href="" class="topLink2">倒萨倒萨</a></td>-->
                        <td><a href="${_basePath}" class="topLink3">进入首页</a></td>
                        <td><a href='javascript:;' onclick='logout();' class="topLink4">退出</a></td>
                    </tr>
                </table>
            </div>
        </div>
        <div class="clear"></div>
        <!--headerBox-----End-->

        <!--导航模块Begin-->
        <div id="navi-box" class="SR_navBox" style="cursor: pointer;">
            <div id="navi" class="SR_nav">
            </div>
            <div id="openedList" class="SR_navRight">
                <div class="navRightBtn" onmouseover="this.className='navRightBtnHover';"
                     onmouseout="this.className='navRightBtn';"></div>
            </div>
            <div class="navSwitchTip">切换窗口</div>
        </div>
    </div>
    <div data-options="region:'center'" style="border: 0px;">
        <div class="easyui-layout" data-options="fit:true" style="border: 0px;">
            <div data-options="region:'west'"
                 style="border: 0px;width: 200px;height: 100%;overflow: hidden; overflow-x: hidden;">
                <iframe id="left" name="left" src="pages/leftnav.jsp" class="pageFrame"></iframe>
            </div>

            <div data-options="region:'center'">
                <div id="easytabs" class="easyui-tabs" fit="true" border="false">
                    <div title="首页">
                        <iframe style="width:100%;height:99%;" scrolling="auto" frameborder="0" src="pages/welcome.jsp"></iframe>
                    </div>
                </div>
            </div>
            <!--
            <div data-options="region:'center'" style="border: 0px;overflow: hidden;">
                <div id="pageFrameContainer" style="width: 100%; height: 100%;">-->
                    <!-- <iframe id="main" name="main" src="pages/fire/homepage/tasktodo.jsp"  class="pageFrame"></iframe> -->
               <!-- </div>
                <div id="body_page" style="width: 100%; height: 100%;"
                     class="easyui-panel" data-options="region:'center',fit:true">
                </div>
            </div>
            -->
        </div>
    </div>
    <div id="open_page_list_container" class="open_menu_list" style="display:none;">
        <div id="opened_page_list">
        </div>
    </div>
    <input type="hidden" id="CUR_USER_ID" value="<%=Var.get("RU.CUR_USER.id")%>" >
    </body>
    </html>

(3). 获取账户信息

LdapAction.loginByLdap.java
作用:
获取统一身份认证平台传回的人事号
根据人事号获取用户信息(user_id 、loginName、 password )
用获取的用户信息进行登录(得到该账户的其他信息)

    import com.alibaba.fastjson.JSONObject;
    import com.siant.assp.ias.sp.saml11.principle.PrincipalAdapter;
    import com.siant.assp.ias.sp.saml11.util.SPUtil;
    import com.sunrise.foundation.dbutil.BeanListHandler;
    import com.sunrise.foundation.dbutil.QueryRunner;
    import com.sunrise.foundation.dbutil.ResultSetHandler;
    import com.sunrise.foundation.utils.MD5Encryptor;
    import com.sunrise.framework.commonquery.CommonQueryHelper;
    import com.sunrise.framework.commonquery.QueryContext;
    import com.sunrise.framework.core.LoginUser;
    import com.sunrise.framework.core.LoginUserSession;
    import com.sunrise.framework.core.UserGroup;
    import com.sunrise.framework.spring.BaseAction;
    import com.sunrise.framework.struts2.Header;
    import com.sunrise.service.security.UserLogService;
    import com.sunrise.service.security.entity.SysPUserGroup;
    import com.sunrise.framework.struts2.JsonObject;

    import java.lang.System;
    import java.sql.ResultSet;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import com.sunrise.foundation.utils.RequestWrapper;
    import com.sunrise.framework.core.ApplicationManager;

    import javax.faces.application.Application;
    import javax.servlet.http.HttpSession;
    import org.jasig.cas.client.authentication.AttributePrincipal;
    import java.security.Principal;
    /**
     * @author lxl
     * @version 1.0 2017/9/21
     * @since JDK1.6
     */
        public class LdapAction{


            public JsonObject loginByLdap() throws Exception{
                RequestWrapper request = ApplicationManager.getRequest();
                Map<String,Object> resultMap = new HashMap<String, Object>();
                //获取统一身份认证平台传回的人事号
                //PrincipalAdapter p = (PrincipalAdapter) SPUtil.getUserPrincipal(request);
                //String personNo = p.getName();
                String personNo = request.getParameter("personNo");
                System.out.println("personNo:"+personNo);
                //根据人事号获取用户信息
                UserLogService userLogService = new UserLogService();
                String sql = "select id,account,password from sys_p_user where account='"+personNo+"'";
                HashMap<String,Object> params = (HashMap)QueryRunner.queryResultSet(sql, new ResultSetHandler<Object>() {
                    @Override
                    public Object handle(ResultSet rs) throws Exception {
                        HashMap<String, String> params = new HashMap<String, String>();
                        while (rs.next()) {
                            params.put("user_id", rs.getString("id"));
                            params.put("loginName", rs.getString("account"));
                            params.put("password", rs.getString("password"));
                        }
                        return params;
                    }
                });
                System.out.println("user_id:"+params.get("user_id"));
                if(params.get("user_id")==""||params.get("user_id")==null){
                    return new JsonObject(new Header(-1, "用户不存在"), resultMap.put("msg", "用户不存在"));
                }
                //用获取的用户信息进行登录
                LoginUser user = (LoginUser) CommonQueryHelper.executeQuery("service/security/Q_FRAMEWORK_SERVICE_SECURITY.xml", "Q_LOGIN_USER_INFO", params, QueryContext.create());
                List userGroups = (List)CommonQueryHelper.executeQuery("service/security/Q_FRAMEWORK_SERVICE_SECURITY.xml", "Q_USER_GROUP_LIST", params, QueryContext.create(), new BeanListHandler(SysPUserGroup.class));
                System.out.println(userGroups.size());
                if(userGroups != null) {
                    user.setUserGroups((UserGroup[])userGroups.toArray(new SysPUserGroup[userGroups.size()]));
                }
                System.out.println("userGroup load success");
                System.out.println("ip:"+request.getRemoteAddr());
                String user_ip1 = request.getRemoteAddr();
                user.setLoginTerminal("WEB");
                user.setLoginIp(user_ip1);
                user.setLoginTime(new Date());
                int loginCode = LoginUserSession.userLogin(user);
                System.out.println(loginCode);

                if(loginCode == 0){
                    return new JsonObject(new Header(0, "统一认证成功"), resultMap.put("msg", "统一认证成功"));
                }
                else{
                    return new JsonObject(new Header(-1, "统一认证失败"), resultMap.put("msg", "统一认证失败"));
                }
            }
            public static void main(String args[]) throws Exception{
                LdapAction ldapAction = new LdapAction();
                ldapAction.loginByLdap();
            }
        }

(4). 着陆地址

Pages/index.jsp
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_26769591/article/details/80861745