From 2c5f5e7091330a748257baab82e81038a0d22816 Mon Sep 17 00:00:00 2001 From: Fancy <Fancy.fx@outlook.com> Date: 星期四, 26 十二月 2024 10:25:30 +0800 Subject: [PATCH] JWT have some error --- pms-parent/pms-global/src/main/resources/mapper/MpOpenIdMapper.xml | 6 +++ pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/daoMp/MpOpenIdMapper.java | 1 pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/login/WeChatService.java | 28 +++++++++++++- pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/util/JwtUtil.java | 46 +++++++++++++++++++++++ 4 files changed, 79 insertions(+), 2 deletions(-) diff --git a/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/daoMp/MpOpenIdMapper.java b/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/daoMp/MpOpenIdMapper.java index ad2844c..f0b1c1e 100644 --- a/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/daoMp/MpOpenIdMapper.java +++ b/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/daoMp/MpOpenIdMapper.java @@ -24,4 +24,5 @@ int updateByPrimaryKey(MpOpenId record); + MpOpenId getInfoByOpenId(String openid); } diff --git a/pms-parent/pms-global/src/main/resources/mapper/MpOpenIdMapper.xml b/pms-parent/pms-global/src/main/resources/mapper/MpOpenIdMapper.xml index 6cea7d0..ce6fba1 100644 --- a/pms-parent/pms-global/src/main/resources/mapper/MpOpenIdMapper.xml +++ b/pms-parent/pms-global/src/main/resources/mapper/MpOpenIdMapper.xml @@ -28,6 +28,12 @@ from mp_open_id where id = #{id,jdbcType=BIGINT} </select> + <select id="getInfoByOpenId" parameterType="java.lang.String" resultMap="BaseResultMap"> + select + <include refid="Base_Column_List" /> + from mp_open_id + where open_id = #{open_id,jdbcType=VARCHAR} + </select> <delete id="deleteByPrimaryKey" parameterType="java.lang.Long"> delete from mp_open_id diff --git a/pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/login/WeChatService.java b/pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/login/WeChatService.java index ecc98e2..f912145 100644 --- a/pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/login/WeChatService.java +++ b/pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/login/WeChatService.java @@ -1,7 +1,10 @@ package com.dy.pmsWechat.login; import com.alibaba.fastjson2.JSONObject; +import com.dy.pmsGlobal.daoMp.MpOpenIdMapper; +import com.dy.pmsGlobal.pojoMp.MpOpenId; import com.dy.pmsWechat.util.RestTemplateUtil; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -22,9 +25,15 @@ private String loginUrl; private final RestTemplateUtil restTemplateUtil; + private MpOpenIdMapper mpOpenIdDao; public WeChatService(RestTemplateUtil restTemplateUtil) { this.restTemplateUtil = restTemplateUtil; + } + + @Autowired + private void setMpOpenIdDao(MpOpenIdMapper mpOpenIdDao) { + this.mpOpenIdDao = mpOpenIdDao; } public JSONObject login(String code) throws IOException { @@ -34,7 +43,22 @@ queryParams.put("js_code", code); queryParams.put("grant_type", "authorization_code"); Map<String, String> headerParams = new HashMap<>(); - return restTemplateUtil.get(loginUrl, queryParams, headerParams); - + JSONObject wxMpUser = restTemplateUtil.get(loginUrl, queryParams, headerParams); + //鑾峰彇寰俊淇℃伅娣诲姞鍒版暟鎹簱 //鍏堟牴鎹畂penid鏌ヨ鐢ㄦ埛淇℃伅 + MpOpenId userInfo = mpOpenIdDao.getInfoByOpenId(wxMpUser.get("openid").toString()); + if(userInfo == null){ //鏁版嵁搴撴病鏈夋椂娣诲姞鍒版暟鎹簱涓� + userInfo = new MpOpenId(); + userInfo.setOpenId(wxMpUser.get("openid").toString()); + mpOpenIdDao.insert(userInfo); + } + //鎺堟潈瀹屾垚涔嬪悗锛岃烦杞埌鍏蜂綋鐨勫姛鑳介〉闈� + //鐢熸垚token,鎸夌収涓�瀹氳鍒欑敓鎴愬瓧绗︿覆锛屽彲浠ュ寘鍚敤鎴蜂俊鎭� + String token= JwtHelper.createToken(userInfo.getId(),userInfo.getNickName()); + //localhost:8080/weixin?a=1&token=222 + if(returnUrl.indexOf("?")==-1){//鑻eturnUrl涓病鏈夊弬鏁� + return "redirect:"+returnUrl+"?token="+token; + }else{ + return "redirect:"+returnUrl+"&token="+token; + } } } \ No newline at end of file diff --git a/pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/util/JwtUtil.java b/pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/util/JwtUtil.java new file mode 100644 index 0000000..9d74256 --- /dev/null +++ b/pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/util/JwtUtil.java @@ -0,0 +1,46 @@ +package com.dy.pmsWechat.util; + +import cn.hutool.jwt.Claims; +import com.alibaba.druid.util.StringUtils; + +public class JwtUtil { + //token瀛楃涓叉湁鏁堟椂闂� + private static long tokenExpiration = 24*60*60*1000; + //鍔犲瘑缂栫爜绉橀挜 + private static String tokenSignKey = "123456"; + + //鏍规嵁userid 鍜� username 鐢熸垚token瀛楃涓� + public static String createToken(Long userId, String userName) { + String token = Jwts.builder() + //璁剧疆token鍒嗙被 + .setSubject("GGKT-USER") + //token瀛楃涓叉湁鏁堟椂闀� + .setExpiration(new Date(System.currentTimeMillis() + tokenExpiration)) + //绉佹湁閮ㄥ垎锛堢敤鎴蜂俊鎭級 + .claim("userId", userId) + .claim("userName", userName) + //鏍规嵁绉橀挜浣跨敤鍔犲瘑缂栫爜鏂瑰紡杩涜鍔犲瘑锛屽瀛楃涓插帇缂� + .signWith(SignatureAlgorithm.HS512, tokenSignKey) + .compressWith(CompressionCodecs.GZIP) + .compact(); + return token; + } + + //浠巘oken瀛楃涓茶幏鍙杣serid + public static Long getUserId(String token) { + if(StringUtils.isEmpty(token)) return null; + Jws<Claims> claimsJws = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token); + Claims claims = claimsJws.getBody(); + Integer userId = (Integer)claims.get("userId"); + return userId.longValue(); + } + + //浠巘oken瀛楃涓茶幏鍙杇etUserName + public static String getUserName(String token) { + if(StringUtils.isEmpty(token)) return ""; + Jws<Claims> claimsJws + = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token); + Claims claims = claimsJws.getBody(); + return (String)claims.get("userName"); + } +} -- Gitblit v1.8.0