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; + } + }