pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/daoMp/MpOpenIdMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
pms-parent/pms-global/src/main/resources/mapper/MpOpenIdMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/login/WeChatService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/util/JwtUtil.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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); } 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 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); //获取微信信息添加到数据库 //先根据openid查询用户信息 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){//若returnUrl中没有参数 return "redirect:"+returnUrl+"?token="+token; }else{ return "redirect:"+returnUrl+"&token="+token; } } } pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/util/JwtUtil.java
New file @@ -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; } //从token字符串获取userid 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(); } //从token字符串获取getUserName 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"); } }