diff --git a/power-admin/pom.xml b/power-admin/pom.xml
index 64d4525..8152f0e 100644
--- a/power-admin/pom.xml
+++ b/power-admin/pom.xml
@@ -127,6 +127,16 @@
org.slf4j
slf4j-log4j12
+
+ org.apache.httpcomponents
+ httpcore
+ 4.4.13
+
+
+ org.apache.httpcomponents
+ httpclient
+ 4.5.12
+
power
diff --git a/power-admin/src/main/java/com/manage/controller/SsoLogin.java b/power-admin/src/main/java/com/manage/controller/SsoLogin.java
new file mode 100644
index 0000000..02b46d0
--- /dev/null
+++ b/power-admin/src/main/java/com/manage/controller/SsoLogin.java
@@ -0,0 +1,326 @@
+package com.manage.controller;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.manage.encrypt.Base64;
+import com.manage.encrypt.MD5;
+import com.manage.entity.Power_Dept;
+import com.manage.entity.Power_Menu;
+import com.manage.service.Power_DeptService;
+import com.manage.service.Power_MenuService;
+import com.manage.service.Power_UserService;
+import com.manage.service.cache.Cache;
+import com.manage.service.cache.CacheManager;
+import com.manage.util.ActionScopeUtils;
+import com.manage.util.DateUtils;
+import com.manage.util.Msg;
+import com.manage.vo.Power_UserVo;
+import com.manage.vo.User_Dept_Menu;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.cxf.endpoint.Client;
+import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
+import org.apache.http.HttpEntity;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.utils.HttpClientUtils;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.*;
+
+/**
+ * Author xuhx
+ * Date 2021/7/1
+ * Time 16:39
+ * Description 供无纸化归档使用的接口
+ * Description 建党100周年纪念日
+ */
+@Controller
+@RequestMapping("ssoLogin/")
+public class SsoLogin {
+ private static Logger logger = LoggerFactory.getLogger(HttpClientUtils.class); // 日志记录
+
+ private static RequestConfig requestConfig = null;
+
+ static {
+ // 设置请求和传输超时时间
+ requestConfig = RequestConfig.custom().setSocketTimeout(600000).setConnectTimeout(600000).build();
+ }
+
+ @Autowired
+ Power_UserService powerUserService;
+
+ @Autowired
+ private Power_MenuService powerMenuService;
+
+ @Autowired
+ private Power_DeptService power_deptService;
+
+ @Value("${EMRMEDICALRECORD_IP}")
+ private String ip;
+
+ @Value("${EMRMEDICALRECORD_PORT}")
+ private String port;
+
+ @Value("${TOKEN_EXPIRE_TIME}")
+ private long TOKEN_EXPIRE_TIME;
+
+ @Value("${oidc_address}")
+ private String oidcAddress;
+
+ @Value("${token_endpoint}")
+ private String tokenEendpoint;
+
+ @Value("${client_id}")
+ private String clientId;
+
+ @Value("${client_secret}")
+ private String clientSecret;
+
+ @Value("${userinfo_endpoint}")
+ private String userinfoEndpoint;
+
+ @Value("${authorization_endpoint}")
+ private String authorizationEndpoint;
+
+ @Value("${URL_ADDRESS}")
+ private String urlAddress;
+
+
+ /*
+ * 单点登录
+ * author xuhx
+ * */
+ @RequestMapping(value = "login",method = RequestMethod.GET,produces = "text/html;charset=utf-8")
+ @ResponseBody
+ public String login(HttpServletRequest request,HttpServletResponse response,String code,String state) throws Exception {
+ String result = "";
+ CloseableHttpResponse responseNew = null;
+ CloseableHttpClient httpClient = null;
+ JSONObject jsonResultToken = null;
+ String url=oidcAddress+tokenEendpoint;
+ String StringUrl = URLEncoder.encode(urlAddress, "GBK");
+ Map paramMap = new HashMap();
+ paramMap.put("client_id",clientId);
+ paramMap.put("client_secret",clientSecret);
+ paramMap.put("code",code);
+ paramMap.put("grant_type","authorization_code");
+ paramMap.put("redirect_uri",urlAddress);
+ String param="client_id="+clientId+"&client_secret="+clientSecret+"&code="+code+"&grant_type=authorization_code&redirect_uri="+StringUrl;
+ String returnObject =doPost(url,paramMap,null);
+ String userName=null;
+ if(returnObject!=null){
+ // 把json字符串转换成json对象
+ jsonResultToken = JSONObject.parseObject(returnObject);
+ String accessToken=jsonResultToken.getString("access_token");
+ // 通过址默认配置创建一个httpClient实例
+ httpClient = HttpClients.createDefault();
+ // 创建httpGet远程连接实例
+ String userUrl=oidcAddress+userinfoEndpoint;
+ HttpGet httpGet = new HttpGet(userUrl);
+ // 设置请求头信息,鉴权
+ httpGet.setHeader("Authorization", "Bearer "+accessToken);
+ httpGet.setConfig(requestConfig);
+ // 执行get请求得到返回对象
+ responseNew = httpClient.execute(httpGet);
+ // 通过返回对象获取返回数据
+ HttpEntity entity = responseNew.getEntity();
+ // 通过EntityUtils中的toString方法将结果转换为字符串
+ String returnResult = EntityUtils.toString(entity);
+ // 把json字符串转换成json对象
+ JSONObject jsonResult = JSONObject.parseObject(returnResult);
+ if(jsonResult!=null){
+ /*if((jsonResult.getString("username"))!=null&&!"".equals(jsonResult.getString("username"))) {
+ userName=jsonResult.getString("username");
+ }*/
+ if((jsonResult.getString("name"))!=null&&!"".equals(jsonResult.getString("name"))) {
+ userName=jsonResult.getString("name");
+ //根据登录名获取用户(需要确保用户登录名唯一)
+ Power_UserVo user = powerUserService.selectByUserName(userName);
+ if (user != null) {
+ String password = MD5.JM(Base64.decode(user.getUserPwd()));
+ if (password != null && !"".equals(password)) {
+ //加密(此部分代码来自FontController的getToken方法,用来获取token及相关操作)
+ String token = UUID.randomUUID().toString();
+ List list = null;
+ List menuList = new ArrayList<>();
+ Set menus = new TreeSet<>();
+ if (user.getRoleId().equals(0) || user.getRoleId().equals(-100)) {
+ list = powerMenuService.queryAllPowerMenu(null,user.getRoleId());
+ } else {
+ list = powerMenuService.selectUserAndRoleMenuListPower(user.getUserId(),null);
+ }
+ if(null != list && !list.isEmpty()){
+ for (Power_Menu power_menu : list) {
+ User_Dept_Menu deptMenu = new User_Dept_Menu();
+ String menuUrl = power_menu.getMenuUrl();
+ if (StringUtils.isNotBlank(menuUrl)) {
+ BeanUtils.copyProperties(power_menu, deptMenu);
+ deptMenu.setMethodParent(power_menu.getParentId());
+ menuList.add(deptMenu);
+ }
+ if (StringUtils.isNotBlank(power_menu.getMethod())) {
+ menus.add(power_menu.getMenuUrl());
+ }
+ }
+ }
+ user.setMenuList(menuList);
+ user.setMenus(menus);
+
+ //设置科室
+ StringBuilder powerDepts = new StringBuilder();
+ List powerDeptsList = power_deptService.selectByPrimaryKeys(user.getDeptId());
+ for(int j=0;j paramMap, Map headerMap) {
+
+ CloseableHttpClient httpClient = null;
+ CloseableHttpResponse httpResponse = null;
+ String result = "";
+ // 创建httpClient实例
+ httpClient = HttpClients.createDefault();
+
+ // 创建httpPost远程连接实例
+ HttpPost httpPost = new HttpPost(url);
+ RequestConfig requestConfig = null;
+ // 配置请求参数实例
+ requestConfig = RequestConfig.custom().setConnectTimeout(35000)// 设置连接主机服务超时时间
+ .setConnectionRequestTimeout(35000)// 设置连接请求超时时间
+ .setSocketTimeout(60000)// 设置读取数据连接超时时间
+ .build();
+
+ // 为httpPost实例设置配置
+ //httpPost.setConfig(requestConfig);
+ // 设置请求头
+ if (headerMap == null){
+ httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded");// "application/json"
+ } else {
+ for (String key : headerMap.keySet()) {
+ httpPost.addHeader(key, headerMap.get(key));
+ }
+ }
+
+ // 封装post请求参数
+ if (null != paramMap && paramMap.size() > 0) {
+ List nvps = new ArrayList<>();
+ // 通过map集成entrySet方法获取entity
+ Set> entrySet = paramMap.entrySet();
+ // 循环遍历,获取迭代器
+ Iterator> iterator = entrySet.iterator();
+ while (iterator.hasNext()) {
+ Map.Entry mapEntry = iterator.next();
+ nvps.add(new BasicNameValuePair(mapEntry.getKey(), mapEntry.getValue().toString()));
+ }
+
+ // 为httpPost设置封装好的请求参数
+ try {
+ httpPost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ }
+ try {
+ // httpClient对象执行post请求,并返回响应参数对象
+ httpResponse = httpClient.execute(httpPost);
+ // 从响应对象中获取响应内容
+ HttpEntity entity = httpResponse.getEntity();
+ result = EntityUtils.toString(entity);
+ } catch (ClientProtocolException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ // 关闭资源
+ if (null != httpResponse) {
+ try {
+ httpResponse.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ if (null != httpClient) {
+ try {
+ httpClient.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ return result;
+ }
+
+}
diff --git a/power-admin/src/main/resources/config/config.properties b/power-admin/src/main/resources/config/config.properties
index 982a973..09ea735 100644
--- a/power-admin/src/main/resources/config/config.properties
+++ b/power-admin/src/main/resources/config/config.properties
@@ -1,7 +1,7 @@
# \u62E6\u622A\u83DC\u5355\u914D\u7F6E\u6587\u4EF6 ljx 2019-4-27
#interceptRequest \u672A\u767B\u5F55\u4E4B\u524D\u653E\u884C\u3002\u9ED8\u8BA4\u4E3Anone
#ajaxRequest ajax\u8BF7\u6C42\u6CA1\u6709\u5BF9\u5E94\u6A21\u5757\uFF0C\u9700\u8981\u653E\u884C\u3002 \u9ED8\u8BA4\u4E3Anone
-releaseRequest = /login,/logout,/services,/font,/refuse,/swagger-ui.html,/webjars,/swagger-resources,/v2
+releaseRequest = /login,/logout,/services,/font,/refuse,/swagger-ui.html,/webjars,/swagger-resources,/v2,/ssoLogin
ajaxRequest = none
#session\u8FC7\u671F\u65F6\u95F4,\u5355\u4F4D\u79D2
@@ -68,4 +68,31 @@ STR_SPLIT = *^:|,.
log.days = 90
#\u5B9A\u4E49\u662F\u5426\u4E3A\u957F\u671F\u767B\u5F55\u7528\u6237\u6B21\u6570
-login.times = 3
\ No newline at end of file
+login.times = 3
+
+#ɭSSO OIDC
+
+#OIDCṩclient_id
+client_id=6225028f50057f2c5923c0643f16cdd81144f6accfbfb785d291ed8852f4ac3c
+
+#OIDCṩclient_secret
+client_secret=144082e19b419304cc38cdd9df42f349782e96170a4337bc2f5f3dbdfeae0323
+
+#OIDCĵַ
+oidc_address= https://gitlab.com
+
+#Ȩַʹ÷
+#ֹܣ
+authorization_endpoint=/oauth/authorize
+
+#ȡTokenӿڣʹ÷
+#ֹܣ
+token_endpoint=/oauth/token
+
+#ûϢӿڣʹ÷
+#ֹܣ
+userinfo_endpoint=/oauth/userinfo
+
+#ʵַ
+URL_ADDRESS=http://10.100.23.1:8080/power/ssoLogin/login
+
diff --git a/power-dao/src/main/java/com/manage/dao/Power_UserMapper.java b/power-dao/src/main/java/com/manage/dao/Power_UserMapper.java
index af61a37..135655e 100644
--- a/power-dao/src/main/java/com/manage/dao/Power_UserMapper.java
+++ b/power-dao/src/main/java/com/manage/dao/Power_UserMapper.java
@@ -67,5 +67,7 @@ public interface Power_UserMapper {
Power_UserVo selectByPrimaryKey1(Integer userId);
+ Power_UserVo selectByUserName(String userName);
+
void updatePersonal(Power_User user);
}
\ No newline at end of file
diff --git a/power-dao/src/main/resources/mapper/Power_UserMapper.xml b/power-dao/src/main/resources/mapper/Power_UserMapper.xml
index 5f72541..1985887 100644
--- a/power-dao/src/main/resources/mapper/Power_UserMapper.xml
+++ b/power-dao/src/main/resources/mapper/Power_UserMapper.xml
@@ -724,6 +724,13 @@
on power_user.role_id = power_role.role_id
where user_id = #{userId,jdbcType=INTEGER}
+
+
update power_user
diff --git a/power-service/src/main/java/com/manage/service/Power_UserService.java b/power-service/src/main/java/com/manage/service/Power_UserService.java
index 0d554a1..f6c3b5e 100644
--- a/power-service/src/main/java/com/manage/service/Power_UserService.java
+++ b/power-service/src/main/java/com/manage/service/Power_UserService.java
@@ -22,6 +22,8 @@ public interface Power_UserService {
Power_UserVo selectByPrimaryKey(Integer userId);
+ Power_UserVo selectByUserName(String userName);
+
int updateByPrimaryKeySelective(Power_User record,HttpServletRequest request);
int updateByPrimaryKey(Power_User record);
diff --git a/power-service/src/main/java/com/manage/service/ipml/Power_UserServiceImpl.java b/power-service/src/main/java/com/manage/service/ipml/Power_UserServiceImpl.java
index f86bb7d..72ec245 100644
--- a/power-service/src/main/java/com/manage/service/ipml/Power_UserServiceImpl.java
+++ b/power-service/src/main/java/com/manage/service/ipml/Power_UserServiceImpl.java
@@ -99,6 +99,12 @@ public class Power_UserServiceImpl implements Power_UserService {
return power_user;
}
+ @Override
+ public Power_UserVo selectByUserName(String userName) {
+ Power_UserVo power_user = powerUserMapper.selectByUserName(userName);
+ return power_user;
+ }
+
@Override
public int updateByPrimaryKeySelective(Power_User powerUser,HttpServletRequest request) {
//取得当前登录账号