From e5bcbc8a21e6c76b49ab41448d882e2c736de650 Mon Sep 17 00:00:00 2001
From: jjLv <1981429112@qq.com>
Date: Fri, 6 Sep 2024 17:37:09 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BD=93=E6=A3=80=E6=8E=A5=E5=8F=A3=E5=8A=A0?=
=?UTF-8?q?=E5=AF=86=E5=8F=8A=E8=B0=83=E8=AF=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 7 +
.../manager/app/controller/AppController.java | 43 ++++++
.../boot/manager/app/dao/AppserviceDao.java | 7 +
.../boot/manager/app/service/Appservice.java | 7 +
.../app/service/impl/AppserviceImpl.java | 10 ++
.../manager/manager/config/AesCbcUtils.java | 52 +++----
.../boot/manager/manager/config/JwtUtils.java | 134 ++++++++++++++++++
.../manager/entity/SecurityConstants.java | 44 ++++++
.../manager/entity/TokenConstants.java | 25 ++++
.../boot/manager/manager/model/SysUser.java | 11 +-
src/main/resources/application.properties | 24 ++--
src/main/resources/mappers/app/AppMapper.xml | 13 +-
12 files changed, 338 insertions(+), 39 deletions(-)
create mode 100644 src/main/java/com/bonus/boot/manager/manager/config/JwtUtils.java
create mode 100644 src/main/java/com/bonus/boot/manager/manager/entity/SecurityConstants.java
create mode 100644 src/main/java/com/bonus/boot/manager/manager/entity/TokenConstants.java
diff --git a/pom.xml b/pom.xml
index 62bc1bc..d6fa242 100644
--- a/pom.xml
+++ b/pom.xml
@@ -179,6 +179,13 @@
spring-boot-starter-aop
+
+
+ io.jsonwebtoken
+ jjwt
+ 0.9.1
+
+
io.springfox
springfox-swagger-ui
diff --git a/src/main/java/com/bonus/boot/manager/app/controller/AppController.java b/src/main/java/com/bonus/boot/manager/app/controller/AppController.java
index e69b914..af053db 100644
--- a/src/main/java/com/bonus/boot/manager/app/controller/AppController.java
+++ b/src/main/java/com/bonus/boot/manager/app/controller/AppController.java
@@ -5,13 +5,17 @@ import com.bonus.boot.manager.app.dao.AppserviceDao;
import com.bonus.boot.manager.app.service.Appservice;
import com.bonus.boot.manager.manager.annotation.LogAnnotation;
import com.bonus.boot.manager.manager.config.AesCbcUtils;
+import com.bonus.boot.manager.manager.config.JwtUtils;
import com.bonus.boot.manager.manager.config.aes.DecryptAndVerify;
import com.bonus.boot.manager.manager.config.aes.EncryptedReq;
import com.bonus.boot.manager.manager.entity.LoginUser;
+import com.bonus.boot.manager.manager.entity.SecurityConstants;
import com.bonus.boot.manager.manager.model.SysUser;
import com.bonus.boot.manager.manager.service.TokenService;
import com.bonus.boot.manager.manager.utils.*;
+import io.jsonwebtoken.Claims;
import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -44,6 +48,7 @@ public class AppController {
public AjaxRes getStatus(SysUser user) {
AjaxRes ar = new AjaxRes();
//String passworld = UserUtil.getLoginUser().getPassword();
+ user.setTelephone(AesCbcUtils.decrypt(user.getTelephone()));
String status = appservice.getStatus(user);
String personnelType = appservice.getPersonnelType(user);
user=appservice.getcancelTime();
@@ -89,6 +94,7 @@ public class AppController {
@PostMapping("gethospital")
public AjaxRes gethospital(String idcard) {
AjaxRes ar = new AjaxRes();
+ idcard = AesCbcUtils.decrypt(idcard);
List hospList = appservice.hospList(idcard);
if (hospList.size() != 0) {
ar.setRes(1);
@@ -121,12 +127,34 @@ public class AppController {
return ar;
}
+ /**
+ * 职业医院接口获取
+ *
+ * @return 返回状态
+ */
+ @PostMapping("getOccupationHospital")
+ public AjaxRes getOccupationHospital() {
+ AjaxRes ar = new AjaxRes();
+ List hospList = appservice.getOccupationHospital();
+ if (!hospList.isEmpty()) {
+ ar.setRes(1);
+ ar.setResMsg("success");
+ ar.setSucceed(hospList);
+ } else {
+ ar.setRes(0);
+ ar.setResMsg("error");
+ ar.setSucceed("isnull");
+ }
+ return ar;
+ }
+
/**
* 医院套餐获取
*/
@PostMapping("getPhysicalExamination")
public AjaxRes getPhysicalExamination(String idcard) {
AjaxRes ar = new AjaxRes();
+ idcard = AesCbcUtils.decrypt(idcard);
List hospList = appservice.getPhysicalExamination(idcard);
if (hospList.size() != 0) {
ar.setRes(1);
@@ -283,6 +311,13 @@ public class AppController {
AjaxRes ar = new AjaxRes();
//我的预约信息查询
List list = appservice.getapplogininfo(pmbean);
+ //循环list里面的值加密
+ for (PmBasePhysicalBean bean : list) {
+ bean.setPhyName(AesCbcUtils.encrypt(bean.getPhyName()));
+ bean.setTelepNumber(AesCbcUtils.encrypt(bean.getTelepNumber()));
+ bean.setIdcard(AesCbcUtils.encrypt(bean.getIdcard()));
+ }
+
if (list.size() != 0) {
ar.setRes(1);
ar.setResMsg("success");
@@ -372,12 +407,20 @@ public class AppController {
@PostMapping("loginNoPassword")
public AjaxRes getToken(LoginUser loginUser){
AjaxRes res = new AjaxRes();
+ String jwtToken = loginUser.getJwtToken();
+ if(StringUtils.isNotEmpty(jwtToken)){
+ Claims claims = JwtUtils.parseToken(jwtToken);
+ jwtToken = (String) claims.get(SecurityConstants.DETAILS_USERNAME);
+ }
String telephone = AesCbcUtils.decrypt(loginUser.getTelephone());
loginUser.setTelephone(telephone);
LoginUser listBean= appservice.checkAccountExist(loginUser);
if(StringHelper.isEmpty(listBean.getUsername())){
res.setResMsg("fail");
res.setResMsg("noThisPhone");
+ }else if(telephone != null && !telephone.equals(jwtToken)){
+ res.setResMsg("fail");
+ res.setResMsg("noThisPhone");
}else {
loginUser.setId(listBean.getId());
loginUser.setIfJob(listBean.getIfJob());
diff --git a/src/main/java/com/bonus/boot/manager/app/dao/AppserviceDao.java b/src/main/java/com/bonus/boot/manager/app/dao/AppserviceDao.java
index 852e750..63757b1 100644
--- a/src/main/java/com/bonus/boot/manager/app/dao/AppserviceDao.java
+++ b/src/main/java/com/bonus/boot/manager/app/dao/AppserviceDao.java
@@ -80,4 +80,11 @@ public interface AppserviceDao {
List getCareerHospital();
String getPersonnelType(SysUser user);
+
+ /**
+ * 职业医院接口获取
+ *
+ * @return 返回状态
+ */
+ List getOccupationHospital();
}
diff --git a/src/main/java/com/bonus/boot/manager/app/service/Appservice.java b/src/main/java/com/bonus/boot/manager/app/service/Appservice.java
index eb684c1..93134f7 100644
--- a/src/main/java/com/bonus/boot/manager/app/service/Appservice.java
+++ b/src/main/java/com/bonus/boot/manager/app/service/Appservice.java
@@ -45,4 +45,11 @@ public interface Appservice {
List getCareerHospital();
String getPersonnelType(SysUser user);
+
+ /**
+ * 职业医院接口获取
+ *
+ * @return 返回状态
+ */
+ List getOccupationHospital();
}
diff --git a/src/main/java/com/bonus/boot/manager/app/service/impl/AppserviceImpl.java b/src/main/java/com/bonus/boot/manager/app/service/impl/AppserviceImpl.java
index aa36259..a1dc3ae 100644
--- a/src/main/java/com/bonus/boot/manager/app/service/impl/AppserviceImpl.java
+++ b/src/main/java/com/bonus/boot/manager/app/service/impl/AppserviceImpl.java
@@ -43,6 +43,16 @@ public class AppserviceImpl implements Appservice {
return appserviceDao.getPersonnelType(user);
}
+ /**
+ * 职业医院接口获取
+ *
+ * @return 返回状态
+ */
+ @Override
+ public List getOccupationHospital() {
+ return appserviceDao.getOccupationHospital();
+ }
+
@Override
public List hospList(String idcard) {
return appserviceDao.hospList(idcard);
diff --git a/src/main/java/com/bonus/boot/manager/manager/config/AesCbcUtils.java b/src/main/java/com/bonus/boot/manager/manager/config/AesCbcUtils.java
index 946469d..cec27b3 100644
--- a/src/main/java/com/bonus/boot/manager/manager/config/AesCbcUtils.java
+++ b/src/main/java/com/bonus/boot/manager/manager/config/AesCbcUtils.java
@@ -12,8 +12,8 @@ import java.lang.reflect.Field;
import java.security.Security;
/**
- *
* AES加密工具类
+ *
* @author HeiZi
*/
@Slf4j
@@ -57,8 +57,8 @@ public class AesCbcUtils {
for (Field field : bean.getClass().getDeclaredFields()) {
// 只处理String类型的字段
if (field.getType() == String.class) {
- field.setAccessible(true); // 允许访问私有字段
-
+ // 允许访问私有字段
+ field.setAccessible(true);
Object value = field.get(bean);
if (value != null) {
String decryptedValue = decrypt((String) value);
@@ -77,15 +77,16 @@ public class AesCbcUtils {
/**
* AES加密
- *(CBC模式)
+ * (CBC模式)
+ *
* @param source 源字符串
* @param
- * @throws Exception
* @return 加密后的密文
+ * @throws Exception
*/
- public static String encrypt(String source ) {
- try{
- String key=sKey;
+ public static String encrypt(String source) {
+ try {
+ String key = sKey;
byte[] sourceBytes = source.getBytes(ENCODING);
byte[] keyBytes = key.getBytes(ENCODING);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM, "BC");
@@ -93,39 +94,40 @@ public class AesCbcUtils {
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(keyBytes, KEY_ALGORITHM), iv);
byte[] decrypted = cipher.doFinal(sourceBytes);
return Base64.encodeBase64String(decrypted);
- }catch (Exception e){
- log.error(e.toString(),e);
+ } catch (Exception e) {
+ log.error(e.toString(), e);
}
return null;
}
public static void main(String[] args) {
- // String json="";
+ // String json="";
- String json="{\"username\":\"guest\",\"password\":\"admin@123\"}";
- String data=encrypt(json);
+ String json = "{\"username\":\"guest\",\"password\":\"admin@123\"}";
+ String data = encrypt(json);
System.err.println(data);
- String jm=decrypt("2rrMRoOfoo9n17MTPSRTidwgXeatSLxWFQfPNSCUJdHvqT58extTi87f1e5LJS0DdMcjzIdtFoHvur9gP7desQ==");
- String jiemi=decrypt(data);
+ String jm = decrypt("2rrMRoOfoo9n17MTPSRTidwgXeatSLxWFQfPNSCUJdHvqT58extTi87f1e5LJS0DdMcjzIdtFoHvur9gP7desQ==");
+ String jiemi = decrypt(data);
System.err.println(jm);
System.err.println(jiemi);
}
/**
* AES解密
- *(CBC模式)
+ * (CBC模式)
+ *
* @param data 加密后的密文
* @param
- * @throws Exception
* @return 源字符串
+ * @throws Exception
*/
- public static String decrypt(String data) {
- try{
- String encryptStr="";
- if(StringHelper.isNotEmpty(data)){
- encryptStr=data.replace(" ","+");
+ public static String decrypt(String data) {
+ try {
+ String encryptStr = "";
+ if (StringHelper.isNotEmpty(data)) {
+ encryptStr = data.replace(" ", "+");
}
- String key=sKey;
+ String key = sKey;
byte[] sourceBytes = Base64.decodeBase64(encryptStr);
byte[] keyBytes = key.getBytes(ENCODING);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM, "BC");
@@ -133,9 +135,9 @@ public class AesCbcUtils {
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(keyBytes, KEY_ALGORITHM), iv);
byte[] decoded = cipher.doFinal(sourceBytes);
return new String(decoded, ENCODING);
- }catch (Exception e){
+ } catch (Exception e) {
log.info("------------------->请求加密参数不正确");
- log.error(e.toString(),e);
+ log.error(e.toString(), e);
}
return null;
}
diff --git a/src/main/java/com/bonus/boot/manager/manager/config/JwtUtils.java b/src/main/java/com/bonus/boot/manager/manager/config/JwtUtils.java
new file mode 100644
index 0000000..975a410
--- /dev/null
+++ b/src/main/java/com/bonus/boot/manager/manager/config/JwtUtils.java
@@ -0,0 +1,134 @@
+package com.bonus.boot.manager.manager.config;
+
+
+import cn.hutool.core.convert.Convert;
+import com.bonus.boot.manager.manager.entity.SecurityConstants;
+import com.bonus.boot.manager.manager.entity.TokenConstants;
+import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.SignatureAlgorithm;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Jwt工具类
+ *
+ * @author zys
+ */
+public class JwtUtils
+{
+ public static String secret = TokenConstants.SECRET;
+
+ /**
+ * 从数据声明生成令牌
+ *
+ * @param claims 数据声明
+ * @return 令牌
+ */
+ public static String createToken(Map claims)
+ {
+ String token = Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS512, secret).compact();
+ return token;
+ }
+
+ /**
+ * 从令牌中获取数据声明
+ *
+ * @param token 令牌
+ * @return 数据声明
+ */
+ public static Claims parseToken(String token)
+ {
+ return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();
+ }
+
+ /**
+ * 根据令牌获取用户标识
+ *
+ * @param token 令牌
+ * @return 用户ID
+ */
+ public static String getUserKey(String token)
+ {
+ Claims claims = parseToken(token);
+ return getValue(claims, SecurityConstants.USER_KEY);
+ }
+
+ /**
+ * 根据令牌获取用户标识
+ *
+ * @param claims 身份信息
+ * @return 用户ID
+ */
+ public static String getUserKey(Claims claims)
+ {
+ return getValue(claims, SecurityConstants.USER_KEY);
+ }
+
+ /**
+ * 根据令牌获取用户ID
+ *
+ * @param token 令牌
+ * @return 用户ID
+ */
+ public static String getUserId(String token)
+ {
+ Claims claims = parseToken(token);
+ return getValue(claims, SecurityConstants.DETAILS_USER_ID);
+ }
+
+ /**
+ * 根据身份信息获取用户ID
+ *
+ * @param claims 身份信息
+ * @return 用户ID
+ */
+ public static String getUserId(Claims claims)
+ {
+ return getValue(claims, SecurityConstants.DETAILS_USER_ID);
+ }
+
+ /**
+ * 根据令牌获取用户名
+ *
+ * @param token 令牌
+ * @return 用户名
+ */
+ public static String getUserName(String token)
+ {
+ Claims claims = parseToken(token);
+ return getValue(claims, SecurityConstants.DETAILS_USERNAME);
+ }
+
+ /**
+ * 根据身份信息获取用户名
+ *
+ * @param claims 身份信息
+ * @return 用户名
+ */
+ public static String getUserName(Claims claims)
+ {
+ return getValue(claims, SecurityConstants.DETAILS_USERNAME);
+ }
+
+ /**
+ * 根据身份信息获取键值
+ *
+ * @param claims 身份信息
+ * @param key 键
+ * @return 值
+ */
+ public static String getValue(Claims claims, String key)
+ {
+ return Convert.toStr(claims.get(key), "");
+ }
+
+ public static void main(String[] args) {
+ Map claims = new HashMap<>();
+ claims.put(SecurityConstants.DETAILS_USERNAME,"ysAdmin");
+ String token = createToken(claims);
+ System.out.println(token);
+ }
+
+}
diff --git a/src/main/java/com/bonus/boot/manager/manager/entity/SecurityConstants.java b/src/main/java/com/bonus/boot/manager/manager/entity/SecurityConstants.java
new file mode 100644
index 0000000..d13fa94
--- /dev/null
+++ b/src/main/java/com/bonus/boot/manager/manager/entity/SecurityConstants.java
@@ -0,0 +1,44 @@
+package com.bonus.boot.manager.manager.entity;
+
+/**
+ * 权限相关通用常量
+ *
+ * @author zys
+ */
+public class SecurityConstants
+{
+ /**
+ * 用户ID字段
+ */
+ public static final String DETAILS_USER_ID = "user_id";
+
+ /**
+ * 用户名字段
+ */
+ public static final String DETAILS_USERNAME = "username";
+
+ /**
+ * 授权信息字段
+ */
+ public static final String AUTHORIZATION_HEADER = "authorization";
+
+ /**
+ * 请求来源
+ */
+ public static final String FROM_SOURCE = "from-source";
+
+ /**
+ * 内部请求
+ */
+ public static final String INNER = "inner";
+
+ /**
+ * 用户标识
+ */
+ public static final String USER_KEY = "user_key";
+
+ /**
+ * 登录用户
+ */
+ public static final String LOGIN_USER = "login_user";
+}
diff --git a/src/main/java/com/bonus/boot/manager/manager/entity/TokenConstants.java b/src/main/java/com/bonus/boot/manager/manager/entity/TokenConstants.java
new file mode 100644
index 0000000..aec33b4
--- /dev/null
+++ b/src/main/java/com/bonus/boot/manager/manager/entity/TokenConstants.java
@@ -0,0 +1,25 @@
+package com.bonus.boot.manager.manager.entity;
+
+/**
+ * Token的Key常量
+ *
+ * @author zys
+ */
+public class TokenConstants
+{
+ /**
+ * 令牌自定义标识
+ */
+ public static final String AUTHENTICATION = "Authorization";
+
+ /**
+ * 令牌前缀
+ */
+ public static final String PREFIX = "Bearer ";
+
+ /**
+ * 令牌秘钥
+ */
+ public final static String SECRET = "abcdefghijklmnopqrstuvwxyz";
+
+}
diff --git a/src/main/java/com/bonus/boot/manager/manager/model/SysUser.java b/src/main/java/com/bonus/boot/manager/manager/model/SysUser.java
index 4095fe0..5f1196f 100644
--- a/src/main/java/com/bonus/boot/manager/manager/model/SysUser.java
+++ b/src/main/java/com/bonus/boot/manager/manager/model/SysUser.java
@@ -24,6 +24,7 @@ public class SysUser extends BaseEntity {
private String ifHigher;//是否高职
private String specialJob;//特殊岗位id
private String cancelTime;
+ private String jwtToken;
public String getPersonnelType() {
return personnelType;
@@ -164,7 +165,15 @@ public class SysUser extends BaseEntity {
this.intro = intro;
}
- public interface Status {
+ public String getJwtToken() {
+ return jwtToken;
+ }
+
+ public void setJwtToken(String jwtToken) {
+ this.jwtToken = jwtToken;
+ }
+
+ public interface Status {
int DISABLED = 0;
int VALID = 1;
int LOCKED = 2;
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 6f457a1..546a71f 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -10,13 +10,13 @@ server.port=18089
#\u8BBF\u95EE\u8DEF\u5F84
server.servlet.context-path=/AppPeaManager
#\u6B63\u5F0F\u5E93
-spring.datasource.url=jdbc:mysql://192.168.1.8:23342/yn_tj_appoint?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
-spring.datasource.username=root
-spring.datasource.password=Bonus@yntj123!
-#\u6D4B\u8BD5\u5E93
-#spring.datasource.url=jdbc:mysql://192.168.0.14:1115/cs_yn?useSSL=false&allowMultiQueries=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
+#spring.datasource.url=jdbc:mysql://192.168.1.8:23342/yn_tj_appoint?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
#spring.datasource.username=root
-#spring.datasource.password=xbzadmin@szedu14!
+#spring.datasource.password=Bonus@yntj123!
+#\u6D4B\u8BD5\u5E93
+spring.datasource.url=jdbc:mysql://192.168.0.14:1115/yn_tj_appoint?useSSL=false&allowMultiQueries=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
+spring.datasource.username=root
+spring.datasource.password=xbzadmin@szedu14!
#\u672C\u5730\u5E93
#spring.datasource.url=jdbc:mysql://192.168.0.14:1115/yn_tj_appoint?useSSL=false&allowMultiQueries=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
#spring.datasource.username=root
@@ -38,13 +38,13 @@ mybatis.type-aliases-package=com.bonus.boot.manager.*.entity
#spring.redis.port=6379
#spring.redis.password=Ynsmz@186redis!
#\u6D4B\u8BD5
-spring.redis.host=192.168.1.8
-spring.redis.port=23347
-spring.redis.password=Bonus@yntj123!
+#spring.redis.host=192.168.1.8
+#spring.redis.port=23347
+#spring.redis.password=Bonus@yntj123!
#\u672C\u5730
-#spring.redis.host=127.0.0.1
-#spring.redis.port=6379
-#spring.redis.password=
+spring.redis.host=127.0.0.1
+spring.redis.port=6379
+spring.redis.password=
# \u65E5\u5FD7
logging.config=classpath:logback-boot.xml
log.level.root=info
diff --git a/src/main/resources/mappers/app/AppMapper.xml b/src/main/resources/mappers/app/AppMapper.xml
index c130ed5..77db0d3 100644
--- a/src/main/resources/mappers/app/AppMapper.xml
+++ b/src/main/resources/mappers/app/AppMapper.xml
@@ -399,7 +399,18 @@
where
is_active='1'
-
+