diff --git a/web/pom.xml b/web/pom.xml
index 321c1d83..a736162d 100644
--- a/web/pom.xml
+++ b/web/pom.xml
@@ -72,6 +72,14 @@
spring-boot-configuration-processor
true
+
+
+ io.jsonwebtoken
+ jjwt
+ 0.9.1
+
+
+
org.springframework.boot
spring-boot-starter-web
diff --git a/web/src/main/java/cn/jlw/util/JwtUtils.java b/web/src/main/java/cn/jlw/util/JwtUtils.java
new file mode 100644
index 00000000..88c2562c
--- /dev/null
+++ b/web/src/main/java/cn/jlw/util/JwtUtils.java
@@ -0,0 +1,66 @@
+package cn.jlw.util;
+
+import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.JwtBuilder;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.SignatureAlgorithm;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * jwt工具类
+ */
+public class JwtUtils {
+ // 密钥
+
+
+ private final static String SECRET = "MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAghgsx+OLLThi7c+/HgCaRla8n+/QLHt++uscoK22dMeaVa3WJvRb5C5qtHGzj9V74pI96JpxdWWCN3Zr1QtanQIDAQABAkB2fWRUD1jVMBVS+rPctLnPNPMKTRdzXGv0SC5D3tRfGZqdcfsmZg8hzBVndHxngmwZS73d+hPjofcdefDDnXq1AiEAz/r1AMF7fweN70mbKgBJuTja37puJMsH2Szwrvb5jlcCIQCgIaLZ5d9J7OomL0NwH8ghba/xgBEpKzErfGbFnTfeKwIgc8ptczFFV1DWZb2eJIEqinOr79l0jwl2YiQSD+cyw1sCIHqxCvv1Wx5jPgy/zeYNE+Q5DMP3Ii7u/x+Yk436JiI9AiEAio84hFm44YTUuV7YCYsbyvnCn/vtcAaqZlczbeHlP1I=";
+
+ private final static long EXP_TIME = 1000 * 60 * 60 * 2;
+
+ private final static String SECRET_ZHIYUN = "zy_zykhd_c1fqkcgekg1icu7ddp8qiho0u";
+
+
+
+ private final static String CURRENT_TO_ZHIYUN = "jVzvfoZU_eFN0CJcFARg0K6DlzTLa7oMWB7lV_y2s7bkv2Bem0281wEwlJp5afhsmM-Ynwvh3mAUTpwblGEz1A";
+
+
+ /**
+ * 生成jwt
+ *
+ * @param claims
+ * @return
+ */
+ public static String createJwt(Map claims) {
+
+ // 签名算法,表示sha256
+ SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
+
+ //构造jwt
+ JwtBuilder builder = Jwts.builder()//.setHeaderParam("type","jwt") // 设置头
+ .setClaims(claims) // 设置载荷
+ .setExpiration(new Date(System.currentTimeMillis() + 1800000)) // 设置过期时间
+ .signWith(signatureAlgorithm, SECRET_ZHIYUN); // 使用指定算法设置签名
+ //生成jwt
+ return builder.compact();
+ }
+
+ /**
+ * 解析,如果不符合,报异常
+ *
+ * @param jsonWebToken
+ * @return
+ */
+ public static Claims parseJWT(String jsonWebToken) {
+ try {
+ Claims claims = Jwts.parser()
+ .setSigningKey(SECRET_ZHIYUN)
+ .parseClaimsJws(jsonWebToken).getBody();
+ return claims;
+ } catch (Exception ex) {
+ throw new RuntimeException(ex.getMessage());
+ }
+ }
+}
+
diff --git a/web/src/main/java/com/ibeetl/jlw/web/IndexController.java b/web/src/main/java/com/ibeetl/jlw/web/IndexController.java
index bc17b87d..746e41bd 100644
--- a/web/src/main/java/com/ibeetl/jlw/web/IndexController.java
+++ b/web/src/main/java/com/ibeetl/jlw/web/IndexController.java
@@ -5,12 +5,14 @@ import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.spring.SpringUtil;
import cn.hutool.json.JSONUtil;
+import cn.hutool.jwt.Claims;
import cn.jlw.Interceptor.RequestReferer;
import cn.jlw.Interceptor.SCoreUser;
import cn.jlw.Interceptor.TStudent;
import cn.jlw.Interceptor.TTeacher;
import cn.jlw.token.TokenService;
import cn.jlw.util.EnumUtil;
+import cn.jlw.util.JwtUtils;
import cn.jlw.util.ToolUtils;
import com.alibaba.fastjson.JSONObject;
import com.auth0.jwt.JWT;
@@ -19,6 +21,8 @@ import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ibeetl.admin.core.dao.CoreOrgDao;
import com.ibeetl.admin.core.entity.CoreOrg;
import com.ibeetl.admin.core.entity.CoreUser;
import com.ibeetl.admin.core.enums.MenuEnums;
@@ -105,6 +109,9 @@ public class IndexController {
private WebPlatformService webPlatformService;
private UniversitiesCollegesDao universitiesCollegesDao;
+ @Autowired
+ CoreOrgDao orgDao;
+
private final Log log = LogFactory.getLog(this.getClass());
public static final String previewIndex = ResourceBundle.getBundle("application").getString("we_chat.baseUrl").replace("server","")+"previewIndex.html";
@@ -723,17 +730,49 @@ public class IndexController {
@PostMapping("/login.json")
@ResponseBody
- public JsonResult login(HttpServletRequest request, HttpServletResponse response,String code, String password, Integer type, Long typeId) {
+ public JsonResult login(HttpServletRequest request, HttpServletResponse response,String code, String password, Integer type, Long typeId
+ ,@RequestParam(required = false) String TOKEN ) {
UniversitiesCollegesJurisdictionExperimentalSystem uSystem = new UniversitiesCollegesJurisdictionExperimentalSystem();
uSystem.setType(type);
uSystem.setTypeId(typeId);
UserLoginInfo info = null;
- try {
- info = userService.login(code, password);
- }catch (Exception e){
- return JsonResult.failMessage(e.getMessage());
+ if (org.springframework.util.StringUtils.hasText(TOKEN))
+ {
+
+ try {
+ io.jsonwebtoken.Claims claims = JwtUtils.parseJWT(TOKEN);
+
+ if (claims == null) {
+ return JsonResult.failMessage("token无效");
+ }
+ String userInfoJsonEncry = (String) claims.get("userInfo");
+
+ ObjectMapper objectMapperEncry = new ObjectMapper();
+ CoreUser user = objectMapperEncry.readValue(userInfoJsonEncry, CoreUser.class);
+
+
+ List orgs = getUserOrg(user.getId(), user.getOrgId());
+
+ info = new UserLoginInfo();
+
+ info.setUser(user);
+
+ info.setOrgs(orgs);
+
+
+ } catch (Exception e) {
+ return JsonResult.failMessage("token无效");
+ }
+ }
+ else {
+ try {
+ info = userService.login(code, password);
+ }catch (Exception e){
+ return JsonResult.failMessage(e.getMessage());
+ }
}
+
CoreUser user = info.getUser();
CoreOrg currentOrg = info.getOrgs().get(0);
@@ -1116,4 +1155,15 @@ public class IndexController {
public JsonResult> getAuthResourcesAndSystemInfo(@SCoreUser CoreUser coreUser) {
return JsonResult.success(webPlatformService.getAuthResourcesAndSystemInfo(coreUser));
}
+
+ public List getUserOrg(long userId, long orgId) {
+ List orgs = orgDao.queryOrgByUser(userId);
+ if (orgs.isEmpty()) {
+ //没有赋值任何角色,默认给一个所在部门
+ CoreOrg userOrg = orgDao.unique(orgId);
+ orgs.add(userOrg);
+ }
+ return orgs;
+ }
+
}