123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366 |
- 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.*;
- 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.*;
- /**
- * 数据采集配置页面
- * Created by hzp on 2015/8/12.
- */
- @RequestMapping("/")
- @Controller("commonPageController")
- 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;
- private RemoteShellService remoteShellService;
- /*
- 登录页面
- */
- @RequestMapping("loginPage")
- public String login(Model model, HttpServletRequest request, HttpServletResponse response) {
- HttpSession session = request.getSession();
- try {
- boolean auth = authenticateService.auth(session, saasAdmin);
- if (!auth) {
- //授权失败
- response.setCharacterEncoding("UTF-8");
- response.setHeader("Content-type", "text/html;charset=UTF-8");
- PrintWriter out = null;
- try {
- out = response.getWriter();
- out.print("<script>alert('登录地址有误-用户授权失败!');</script>");
- response.sendRedirect("/esb/loginPage");
- out.flush();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- IOUtils.closeQuietly(out);
- }
- } else {
- remoteShellService.start();
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- model.addAttribute("contentPage", "/common/login");
- return "pageView";
- }
- /**
- * 租户登录页面
- *
- * @param model
- * @param tenantName
- * @param request
- * @return
- */
- @RequestMapping("{tenantName}/loginPage")
- public String tenantLogin(Model model,
- @PathVariable(name = "tenantName") String tenantName,
- HttpServletRequest request, HttpServletResponse response) throws IOException {
- HttpSession session = request.getSession();
- boolean auth = false;
- try {
- auth = authenticateService.auth(session, tenantName);
- System.out.println("auth: " + auth);
- if (!auth) {
- //授权失败,切换回管理平台数据库
- auth = authenticateService.auth(session, saasAdmin);
- response.setCharacterEncoding("UTF-8");
- response.setHeader("Content-type", "text/html;charset=UTF-8");
- PrintWriter out = null;
- try {
- out = response.getWriter();
- out.print("<script>alert('请求地址不存在!');</script>");
- response.sendRedirect("/esb/loginPage");
- out.flush();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- IOUtils.closeQuietly(out);
- }
- } else {
- remoteShellService.start();
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- model.addAttribute("contentPage", "/common/login");
- 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());
- //获取菜单
- 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}/oauth2/index")
- public String tenantIndex(
- @PathVariable(name = "tenantName") String tenantName,
- HttpServletRequest request, Model model) {
- HttpSession session = request.getSession();
- boolean auth = false;
- String clientId = request.getParameter(ContextAttributes.CLIENTID);
- String token = request.getParameter(ContextAttributes.ACCESSTOKEN);
- String loginName = request.getParameter(ContextAttributes.LOGIN_NAME);
- //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");
- 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());
- }
- }
- /*
- 系统主页
- */
- @RequestMapping("homePage")
- public String home(Model model) {
- model.addAttribute("contentPage", "/common/home");
- 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;
- }
- }
|