huangzhiyong 8 роки тому
батько
коміт
1f33b04521

+ 1 - 1
hos-core/src/main/java/com/yihu/hos/core/http/DefaultClientImpl.java

@ -296,7 +296,7 @@ class DefaultClientImpl implements HTTPClient {
        final String[] query = {""};
        params.forEach((name, value) -> {
            try {
                query[0] += "&" + name + URLEncoder.encode(value, "UTF-8");
                query[0] += "&" + name + "=" + URLEncoder.encode(value, "UTF-8");
            } catch (UnsupportedEncodingException e) {
                throw new RuntimeException("encode url ");
            }

+ 52 - 0
hos-web-framework/src/main/java/com/yihu/hos/web/framework/model/AccessToken.java

@ -0,0 +1,52 @@
package com.yihu.hos.web.framework.model;
/**
 * Created by hzp on 2017/3/28.
 */
public class AccessToken {
    private String accessToken;
    private String refreshToken;
    private String tokenType;
    private String user;
    private int expiresIn;
    public String getTokenType() {
        return tokenType;
    }
    public void setTokenType(String tokenType) {
        this.tokenType = tokenType;
    }
    public String getAccessToken() {
        return accessToken;
    }
    public void setAccessToken(String accessToken) {
        this.accessToken = accessToken;
    }
    public String getRefreshToken() {
        return refreshToken;
    }
    public void setRefreshToken(String refreshToken) {
        this.refreshToken = refreshToken;
    }
    public int getExpiresIn() {
        return expiresIn;
    }
    public void setExpiresIn(int expiresIn) {
        this.expiresIn = expiresIn;
    }
    public String getUser() {
        return user;
    }
    public void setUser(String user) {
        this.user = user;
    }
}

+ 118 - 0
hos-web-framework/src/main/java/com/yihu/hos/web/framework/model/Envelop.java

@ -0,0 +1,118 @@
package com.yihu.hos.web.framework.model;
import java.io.Serializable;
import java.util.List;
/**
 * 信封对象,封装REST接口的返回值内容。包括:
 * - 页码
 * - 页大小
 * - 错误消息
 * - 错误代码
 * - 对象模型
 *
 * 信封对象的返回场景:
 * - API使用者确实无法访问返回头,即一些语言库无法处理HTTP的响应消息,这时候需要以这种形式提供返回值。
 * - API需要支持交叉域请求(通过JSONP)。
 *
 * @author llh
 */
public class Envelop implements Serializable{
    private static final long serialVersionUID = 2076324875575488461L;
    private boolean successFlg;
    private int pageSize = 10;
    private int currPage;
    private int totalPage;
    private int totalCount;
    private List detailModelList;
    private Object obj;
    private String errorMsg;
    private int errorCode;
    public Object getObj() {
        return obj;
    }
    public void setObj(Object obj) {
        this.obj = obj;
    }
    public int getTotalCount() {
        return totalCount;
    }
    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }
    public boolean isSuccessFlg() {
        return successFlg;
    }
    public void setSuccessFlg(boolean successFlg) {
        this.successFlg = successFlg;
    }
    public List getDetailModelList() {
        return detailModelList;
    }
    public void setDetailModelList(List detailModelList) {
        this.detailModelList = detailModelList;
    }
    public String getErrorMsg() {
        return errorMsg;
    }
    public void setErrorMsg(String errorMsg) {
        this.errorMsg = errorMsg;
    }
    public int getErrorCode() {
        return errorCode;
    }
    public void setErrorCode(int errorCode) {
        this.errorCode = errorCode;
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public int getCurrPage() {
        return currPage;
    }
    public void setCurrPage(int currPage) {
        this.currPage = currPage;
    }
    public int getTotalPage() {
        if (totalCount % pageSize == 0) {
            totalPage = totalCount / pageSize;
        } else {
            totalPage = totalCount / pageSize + 1;
        }
        return totalPage;
    }
    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }
}

+ 99 - 0
hos-web-framework/src/main/java/com/yihu/hos/web/framework/model/EnvelopExt.java

@ -0,0 +1,99 @@
package com.yihu.hos.web.framework.model;
import java.util.List;
/**
 * 用来解析信封的对象
 *
 * @author lincl
 * @version 1.0
 * @created 2016/4/26
 */
public class EnvelopExt<T> {
    private static final long serialVersionUID = 2076324875575488461L;
    private boolean successFlg;
    private int pageSize = 10;
    private int currPage;
    private int totalPage;
    private int totalCount;
    private List<T> detailModelList;
    private T obj;
    private String errorMsg;
    private int errorCode;
    public static long getSerialVersionUID() {
        return serialVersionUID;
    }
    public boolean isSuccessFlg() {
        return successFlg;
    }
    public void setSuccessFlg(boolean successFlg) {
        this.successFlg = successFlg;
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public int getCurrPage() {
        return currPage;
    }
    public void setCurrPage(int currPage) {
        this.currPage = currPage;
    }
    public int getTotalPage() {
        return totalPage;
    }
    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }
    public int getTotalCount() {
        return totalCount;
    }
    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }
    public List<T> getDetailModelList() {
        return detailModelList;
    }
    public void setDetailModelList(List<T> detailModelList) {
        this.detailModelList = detailModelList;
    }
    public T getObj() {
        return obj;
    }
    public void setObj(T obj) {
        this.obj = obj;
    }
    public String getErrorMsg() {
        return errorMsg;
    }
    public void setErrorMsg(String errorMsg) {
        this.errorMsg = errorMsg;
    }
    public int getErrorCode() {
        return errorCode;
    }
    public void setErrorCode(int errorCode) {
        this.errorCode = errorCode;
    }
}

+ 16 - 1
hos-web-framework/src/main/java/com/yihu/hos/web/framework/util/controller/BaseController.java

@ -8,6 +8,7 @@ import com.yihu.hos.core.http.HttpClientKit;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.web.framework.model.DetailModelResult;
import com.yihu.hos.web.framework.model.Envelop;
import com.yihu.hos.web.framework.util.SignVerifyUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@ -38,7 +39,7 @@ public class BaseController extends AbstractController {
    public String url;
    @Autowired
    private ObjectMapper objectMapper;
    protected ObjectMapper objectMapper;
    public BaseController() {
    }
@ -248,4 +249,18 @@ public class BaseController extends AbstractController {
        return null;
    }
    public Envelop failed(String errMsg) {
        Envelop envelop = new Envelop();
        envelop.setSuccessFlg(false);
        envelop.setErrorMsg(errMsg);
        return envelop;
    }
    public Envelop success(Object object) {
        Envelop envelop = new Envelop();
        envelop.setSuccessFlg(true);
        envelop.setObj(object);
        return envelop;
    }
}

+ 12 - 0
pom.xml

@ -144,6 +144,18 @@
            <artifactId>zbus</artifactId>
            <version>7.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yihu.ehr</groupId>
            <artifactId>commons-admin-gateway-model</artifactId>
            <version>1.1.2</version>
        </dependency>
    </dependencies>
    <build>

+ 183 - 79
src/main/java/com/yihu/hos/common/CommonPageController.java

@ -1,25 +1,38 @@
package com.yihu.hos.common;
import com.fasterxml.jackson.core.type.TypeReference;
import com.yihu.ehr.agModel.app.AppFeatureModel;
import com.yihu.hos.common.constants.ContextAttributes;
import com.yihu.hos.core.http.HTTPResponse;
import com.yihu.hos.core.http.HttpClientKit;
import com.yihu.hos.remoteManage.service.RemoteShellService;
import com.yihu.hos.system.model.SystemUser;
import com.yihu.hos.tenant.model.TenantSession;
import com.yihu.hos.tenant.service.AuthenticateService;
import com.yihu.hos.web.framework.model.AccessToken;
import com.yihu.hos.web.framework.model.Envelop;
import com.yihu.hos.web.framework.model.EnvelopExt;
import com.yihu.hos.web.framework.util.controller.BaseController;
import io.swagger.annotations.ApiParam;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;
/**
 * 数据采集配置页面
@ -31,6 +44,12 @@ public class CommonPageController extends BaseController {
    @Value("${spring.administrators}")
    private String saasAdmin;
    @Value("${spring.clientId}")
    private String clientId;
    @Value("${service-gateway.adminUrl}")
    public String adminUrl;
    @Value("${service-gateway.portalUrl}")
    public String portalUrl;
    @Autowired
    private AuthenticateService authenticateService;
@ -118,9 +137,61 @@ public class CommonPageController extends BaseController {
    }
    /*
    首页页面
首页页面
 */
    @RequestMapping("indexPage")
    public String index(HttpServletRequest request, Model model) {
        HttpSession session = request.getSession();
        SystemUser user = (SystemUser) session.getAttribute("userInfo");
        TenantSession tenantSession = (TenantSession) session.getAttribute(ContextAttributes.TENANT_SESSION);
        model.addAttribute("userName", user.getUserName());
        model.addAttribute("tenant", tenantSession.getTenant());
        //获取菜单
        String menu = "[{id: 1, text: '任务管理',icon:'${staticRoot}/images/index/menu2_icon.png'},\n" +
                "        {id: 11, pid: 1, text: '任务跟踪', url: '${contextRoot}/datacollect/trackJob',targetType:'1'},\n" +
                "        {id: 12, pid: 1, text: '任务补采', url: '${contextRoot}/datacollect/repeatDatacollect'},\n" +
                "        {id: 13, pid: 1, text: '任务配置', url: '${contextRoot}/datacollect/configJob'},\n" +
                "        {id: 2, text: '标准管理',icon:'${staticRoot}/images/index/menu3_icon.png'},\n" +
                "        {id: 21, pid: 2, text: '集成标准', url: '${contextRoot}/integration/initial/standard'},\n" +
                "        {id: 22, pid: 2, text: '应用标准', url: '${contextRoot}/integration/initial/application'},\n" +
                "        {id: 23, pid: 2, text: '适配方案', url: '${contextRoot}/adapterPlan/initial'},\n" +
                "        {id: 3, text: '资源管理',icon:'${staticRoot}/images/index/menu4_icon.png'},\n" +
                "        {id: 31, pid: 3, text: '资源注册', url: '${contextRoot}/resource/resource/initial'},\n" +
                "        {id: 32, pid: 3, text: '资源浏览', url: '${contextRoot}/resource/resourcePage'},\n" +
                "        {id: 34, pid: 3, text: '资源分类', url: '${contextRoot}/resource/rsCategory/initial'},\n" +
                "        {id: 35, pid: 3, text: '业务资源', url: '${contextRoot}/resourceRest/initial'},\n" +
                "        {id: 4, text: '维度管理',icon:'${staticRoot}/images/index/menu5_icon.png'},\n" +
                "        {id: 41, pid: 4, text: '维度配置', url: '${contextRoot}/dimension/dimension'},\n" +
                "        {id: 42, pid: 4, text: '维度类别配置', url: '${contextRoot}/dimension/dimensioncatetory'},\n" +
                "        {id: 9, text: '系统配置',icon:'${staticRoot}/images/index/menu6_icon.png'},\n" +
                "        {id: 91, pid: 9, text: '机构配置', url: '${contextRoot}/org/initial'},\n" +
                "        {id: 92, pid: 9, text: '数据源配置', url: '${contextRoot}/datasource/configSources'},\n" +
                "        {id: 93, pid: 9, text: '菜单配置', url: '${contextRoot}/menu/initial'},\n" +
                "        {id: 100, pid: 9, text: '菜单按钮配置', url: '${contextRoot}/menu/menuAction/initial'},\n" +
                "        {id: 94, pid: 9, text: '用户管理', url: '${contextRoot}/user/initial'},\n" +
                "        {id: 95, pid: 9, text: '角色管理', url: '${contextRoot}/role/initial'},\n" +
                "        {id: 96, pid: 9, text: '权限管理', url: '${contextRoot}/authority/initial'},\n" +
                "        {id: 97, pid: 9, text: '字典管理', url: '${contextRoot}/dict/initial' },\n" +
                "        {id: 98, pid: 9, text: '系统参数', url: '${contextRoot}/param/initial'},\n" +
                "        {id: 99, pid: 9, text: '<spring:message code=\"title.app.manage\"/>', url: '${contextRoot}/app/initial'}]";
        model.addAttribute("menu", menu);
        model.addAttribute("contentPage", "/common/index");
        return "pageView";
    }
    /**
     * oauth2 自动登录后首页
     *
     * @param tenantName 租户名称
     * @param request
     * @param model
     * @return
     */
    @RequestMapping("{tenantName}/indexPage")
    @RequestMapping("{tenantName}/oauth2/index")
    public String tenantIndex(
            @PathVariable(name = "tenantName") String tenantName,
            HttpServletRequest request, Model model) {
@ -131,85 +202,23 @@ public class CommonPageController extends BaseController {
        String token = request.getParameter(ContextAttributes.ACCESSTOKEN);
        String loginName = request.getParameter(ContextAttributes.LOGIN_NAME);
        //通过clientId和 oauth2 code 获取token
//        String token = getToken(clientId, code);
        if (!StringUtils.isEmpty(token)) {
            //验证token
            boolean succ = validToken(clientId, token);
            if (succ) {
                //TODO 根据token和clientId 获取用户信息
                SystemUser userInfo = new SystemUser();
                userInfo.setLoginCode(loginName);
                userInfo.setUserName("管理员");
                session.setAttribute("userInfo", userInfo);
                try {
                    auth = authenticateService.auth(session, tenantName);
                    if (!auth) {
                        model.addAttribute("contentPage", "/common/tokenValidFail");
                        return "pageView";
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                model.addAttribute("userName", "admin");
                model.addAttribute("tenant", tenantName);
                //获取菜单
                String menu = "[{id: 1, text: '任务管理',icon:'${staticRoot}/images/index/menu2_icon.png'},\n" +
                        "        {id: 11, pid: 1, text: '任务跟踪', url: '${contextRoot}/datacollect/trackJob',targetType:'1'},\n" +
                        "        {id: 12, pid: 1, text: '任务补采', url: '${contextRoot}/datacollect/repeatDatacollect'},\n" +
                        "        {id: 13, pid: 1, text: '任务配置', url: '${contextRoot}/datacollect/configJob'},\n" +
                        "        {id: 2, text: '标准管理',icon:'${staticRoot}/images/index/menu3_icon.png'},\n" +
                        "        {id: 21, pid: 2, text: '集成标准', url: '${contextRoot}/integration/initial/standard'},\n" +
                        "        {id: 22, pid: 2, text: '应用标准', url: '${contextRoot}/integration/initial/application'},\n" +
                        "        {id: 23, pid: 2, text: '适配方案', url: '${contextRoot}/adapterPlan/initial'},\n" +
                        "        {id: 3, text: '资源管理',icon:'${staticRoot}/images/index/menu4_icon.png'},\n" +
                        "        {id: 31, pid: 3, text: '资源注册', url: '${contextRoot}/resource/resource/initial'},\n" +
                        "        {id: 32, pid: 3, text: '资源浏览', url: '${contextRoot}/resource/resourcePage'},\n" +
                        "        {id: 34, pid: 3, text: '资源分类', url: '${contextRoot}/resource/rsCategory/initial'},\n" +
                        "        {id: 35, pid: 3, text: '业务资源', url: '${contextRoot}/resourceRest/initial'},\n" +
                        "        {id: 4, text: '维度管理',icon:'${staticRoot}/images/index/menu5_icon.png'},\n" +
                        "        {id: 41, pid: 4, text: '维度配置', url: '${contextRoot}/dimension/dimension'},\n" +
                        "        {id: 42, pid: 4, text: '维度类别配置', url: '${contextRoot}/dimension/dimensioncatetory'},\n" +
                        "        {id: 9, text: '系统配置',icon:'${staticRoot}/images/index/menu6_icon.png'},\n" +
                        "        {id: 91, pid: 9, text: '机构配置', url: '${contextRoot}/org/initial'},\n" +
                        "        {id: 92, pid: 9, text: '数据源配置', url: '${contextRoot}/datasource/configSources'},\n" +
                        "        {id: 93, pid: 9, text: '菜单配置', url: '${contextRoot}/menu/initial'},\n" +
                        "        {id: 100, pid: 9, text: '菜单按钮配置', url: '${contextRoot}/menu/menuAction/initial'},\n" +
                        "        {id: 94, pid: 9, text: '用户管理', url: '${contextRoot}/user/initial'},\n" +
                        "        {id: 95, pid: 9, text: '角色管理', url: '${contextRoot}/role/initial'},\n" +
                        "        {id: 96, pid: 9, text: '权限管理', url: '${contextRoot}/authority/initial'},\n" +
                        "        {id: 97, pid: 9, text: '字典管理', url: '${contextRoot}/dict/initial' },\n" +
                        "        {id: 98, pid: 9, text: '系统参数', url: '${contextRoot}/param/initial'},\n" +
                        "        {id: 99, pid: 9, text: '<spring:message code=\"title.app.manage\"/>', url: '${contextRoot}/app/initial'}]";
                model.addAttribute("menu", menu);
                model.addAttribute("contentPage", "/common/index");
            } else {
                //TODO  返回验证错误页面
        //TODO 根据token和clientId 获取用户信息
        SystemUser userInfo = new SystemUser();
        userInfo.setLoginCode(loginName);
        userInfo.setUserName("管理员");
        session.setAttribute("userInfo", userInfo);
        try {
            auth = authenticateService.auth(session, tenantName);
            if (!auth) {
                model.addAttribute("contentPage", "/common/tokenValidFail");
                return "pageView";
            }
        } else {
            //TODO  返回验证错误页面
            model.addAttribute("contentPage", "/common/tokenValidFail");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "pageView";
    }
    /*
首页页面
 */
    @RequestMapping("indexPage")
    public String index(HttpServletRequest request, Model model) {
        HttpSession session = request.getSession();
        SystemUser user = (SystemUser) session.getAttribute("userInfo");
        TenantSession tenantSession = (TenantSession) session.getAttribute(ContextAttributes.TENANT_SESSION);
        model.addAttribute("userName", user.getUserName());
        model.addAttribute("tenant", tenantSession.getTenant());
        model.addAttribute("userName", "admin");
        model.addAttribute("tenant", tenantName);
        //获取菜单
        String menu = "[{id: 1, text: '任务管理',icon:'${staticRoot}/images/index/menu2_icon.png'},\n" +
                "        {id: 11, pid: 1, text: '任务跟踪', url: '${contextRoot}/datacollect/trackJob',targetType:'1'},\n" +
@ -242,9 +251,91 @@ public class CommonPageController extends BaseController {
        model.addAttribute("contentPage", "/common/index");
        return "pageView";
    }
    /**
     * oauth2 自动登陆中间页
     *
     * @param model
     * @param tenantName
     * @return
     */
    @RequestMapping(value = "{tenantName}/oauth2/signin")
    public String signin(Model model,
                         @PathVariable(name = "tenantName") String tenantName) {
        model.addAttribute("tenantName", tenantName);
        model.addAttribute("contentPage", "common/signin");
        model.addAttribute("successFlg", true);
        return "pageView";
    }
    /*
      *  oauth2 自动登录
      */
    @RequestMapping(value = "oauth2/autoLogin", method = RequestMethod.POST)
    @ResponseBody
    public Envelop autoLogin(Model model,
                             HttpServletRequest request,
                             @ApiParam(name = "token")
                             @RequestParam String token) throws Exception {
        Envelop result = new Envelop();
        try {
            Map<String, String> params = new HashMap<>();
            params.put("clientId", clientId);
            params.put("accessToken", token);
            HTTPResponse response = HttpClientKit.post(portalUrl + "/oauth/validToken", params);
            if (response.getStatusCode() != 200) {
                System.out.println("获取 token 请求失败!");
                return null;
            }
            Map map = objectMapper.readValue(response.getBody(), Map.class);
            if ((Boolean) map.get("successFlg")) {
                AccessToken accessToken = objectMapper.readValue(objectMapper.writeValueAsString(map.get("data")), AccessToken.class);
                String loginName = accessToken.getUser();
                //验证通过。赋值session中的用户信息
                HTTPResponse userResponse = HttpClientKit.get(adminUrl + "/users/" + loginName, params);
                result = (Envelop) this.objectMapper.readValue(userResponse.getBody(), Envelop.class);
                Collection<GrantedAuthority> gas = new ArrayList<>();
                if (result.isSuccessFlg()) {
                    String ex = this.objectMapper.writeValueAsString(result.getObj());
                    Map userMap = objectMapper.readValue(ex, Map.class);
                    //TODO 设置当前登录用户
                    String userId = userMap.get("id").toString();
                    List<AppFeatureModel> features = getUserFeatures(userId);
                    if (features != null) {
                        for (int i = 0; i < features.size(); i++) {
                            String url = features.get(i).getUrl();
                            if (!StringUtils.isEmpty(url))
                                gas.add(new SimpleGrantedAuthority(url));
                        }
                    }
                } else {
                    return failed(result.getErrorMsg());
                }
                //生成认证token
                Authentication AuthenticationToken = new UsernamePasswordAuthenticationToken(loginName, "", gas);
                //将信息存放到SecurityContext
                SecurityContextHolder.getContext().setAuthentication(AuthenticationToken);
                return success(accessToken);
            } else {
                String msg = String.valueOf(map.get("message"));
                return failed(msg);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return failed(e.getMessage());
        }
    }
    /*
    系统主页
@ -255,6 +346,19 @@ public class CommonPageController extends BaseController {
        return "partView";
    }
    private List<AppFeatureModel> getUserFeatures(String userId) throws Exception {
        Map<String, String> params = new HashMap<>();
        params.put("user_id", userId);
        HTTPResponse resultStr = HttpClientKit.get(adminUrl + "/roles/user/features", params);
        EnvelopExt<AppFeatureModel> envelop =
                (EnvelopExt<AppFeatureModel>) objectMapper.readValue(resultStr.getBody(), new TypeReference<EnvelopExt<AppFeatureModel>>() {
                });
        if (envelop.isSuccessFlg()) {
            return envelop.getDetailModelList();
        }
        throw new Exception(resultStr.getBody());
    }
    @Autowired
    public void setRemoteShellService(RemoteShellService remoteShellService) {
        this.remoteShellService = remoteShellService;

+ 3 - 10
src/main/java/com/yihu/hos/filter/SessionOutTimeFilter.java

@ -42,18 +42,11 @@ public class SessionOutTimeFilter extends OncePerRequestFilter {
            return;
        }
        String token = null;
        String clientId = null;
        String contentType = httpServletRequest.getHeader("content-type");
        if (contentType != null && !contentType.contains("multipart/form-data")) {
            token = httpServletRequest.getParameter("token");
            clientId = httpServletRequest.getParameter("clientId");
        }
        if (token == null || clientId == null) {
        String requestUri = httpServletRequest.getRequestURI();
        //¹ýÂËoauth2 ÇëÇó
        if (requestUri!=null && !requestUri.contains("/oauth2")) {
            if (httpServletRequest.getSession(false) == null
                    || httpServletRequest.getSession().getAttribute("userInfo") == null) {
                // AJAX REQUEST PROCESS
                String attachment = LocalContext.getContext().getAttachment(ContextAttributes.TENANT_NAME);
                if ("XMLHttpRequest".equalsIgnoreCase(httpServletRequest.getHeader("X-Requested-With"))) {

+ 1 - 1
src/main/resources/application.yml

@ -60,7 +60,7 @@ hos:
  mysql:
    filePath: e://learn.sql   #租户基础表 sql文件位置
service-gateway:
  portalUrl: http://localhost:444/api/v1.0/portal
  portalUrl: http://localhost:10280/api/v1.0/portal
  adminUrl: http://localhost:10000/api/v1.0/admin
  url: http://localhost:9999/api
---

+ 7 - 0
src/main/webapp/WEB-INF/ehr/jsp/common/signin.jsp

@ -0,0 +1,7 @@
<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="utf-8"%>
<%@include file="/WEB-INF/ehr/commons/jsp/commonInclude.jsp" %>
<div style="margin:20px;">
加载中,请稍候...
    <input type="hidden" id="tenantName" value='${tenantName}'/>
</div>

+ 43 - 0
src/main/webapp/WEB-INF/ehr/jsp/common/signinJs.jsp

@ -0,0 +1,43 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="utf-8" %>
<%@include file="/WEB-INF/ehr/commons/jsp/commonInclude.jsp" %>
<script>
    var signin = {
        init:function () {
            //判断是否自动登录
            var tenantName = '${tenantName}';
            var hash = window.location.hash;
            if(hash.indexOf("#access_token")>=0)
            {
                //获取accrss_token
                var tokenString =hash.substring(1,hash.indexOf("&"));
                var token = tokenString.substr(hash.indexOf("="));
                //自动登录
                $.ajax({
                    url: "${contextRoot}/oauth2/autoLogin",
                    type: 'POST',
                    dataType: 'json',
                    data:{
                        "token":token
                    },
                    success: function (data) {
                        if(data.successFlg){
                            location.href = '${contextRoot}/'+tenantName + '/oauth2/index#signin';
                        }else{
                            location.href = '${contextRoot}/common/tokenValidFail';
                        }
                    },
                    error: function (data) {
                        location.href = '${contextRoot}/common/tokenValidFail';
                    }
                });
                return;
            }
        }
    }
    $(function() {
        signin.init();
    });
</script>