Ver código fonte

新建并完成获取token,验证token功能。

zhuoning 4 anos atrás
pai
commit
0d6aa43b26

+ 33 - 0
huimv-hy-production/huimv.hy.erp.datasource/pom.xml

@@ -17,6 +17,39 @@
             <artifactId>sqljdbc4</artifactId>
             <version>4.0</version>
         </dependency>
+        <!-- jwt -->
+        <dependency>
+            <groupId>com.auth0</groupId>
+            <artifactId>java-jwt</artifactId>
+            <version>3.8.3</version>
+        </dependency>
+        <dependency>
+            <groupId>joda-time</groupId>
+            <artifactId>joda-time</artifactId>
+            <version>LATEST</version>
+        </dependency>
+        <!--commons-lang-->
+        <dependency>
+            <groupId>commons-lang</groupId>
+            <artifactId>commons-lang</artifactId>
+            <version>2.6</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+        </dependency>
+        <!--hutool-->
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>LATEST</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.directory.studio</groupId>
+            <artifactId>org.apache.commons.codec</artifactId>
+            <version>1.8</version>
+        </dependency>
+
     </dependencies>
 
 </project>

+ 10 - 2
huimv-hy-production/huimv.hy.erp.datasource/src/main/java/com/huimv/production/datasource/controller/ErpDataController.java

@@ -1,10 +1,13 @@
 package com.huimv.production.datasource.controller;
 
+import com.alibaba.fastjson.JSONObject;
 import com.huimv.production.datasource.service.IErpDataService;
+import com.huimv.production.datasource.utils.TokenUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.repository.query.Param;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 /**
@@ -21,7 +24,8 @@ public class ErpDataController {
 
     @Autowired
     private IErpDataService erpDataService;
-
+    @Autowired
+    private TokenUtil tokenUtil;
     /**
      * @Method      : getPsy
      * @Description : 取货Psy
@@ -33,7 +37,11 @@ public class ErpDataController {
      * @Time        : 20:57
      */
     @RequestMapping("/getPsy")
-    public String getPsy(){
+    public String getPsy(@RequestParam(value = "accessToken") String accessToken){
+        JSONObject tokenJo = tokenUtil.verifyToken(accessToken);
+        if(!tokenJo.getBoolean("success")){
+            return tokenJo.toJSONString();
+        }
         return erpDataService.getPsy();
     }
 

+ 80 - 0
huimv-hy-production/huimv.hy.erp.datasource/src/main/java/com/huimv/production/datasource/controller/TokenController.java

@@ -0,0 +1,80 @@
+package com.huimv.production.datasource.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.huimv.production.datasource.utils.TokenUtil;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.apache.commons.codec.binary.Hex;
+
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+@RestController
+@RequestMapping(value="/token",method = RequestMethod.GET)
+public class TokenController {
+
+    @Value("${apiService.client}")
+    private String clientId;
+
+    /**
+     * @Method      : getToken
+     * @Description : 
+     * @Params      : [userId, timestamp, random, sign]
+     * @Return      : java.lang.String
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2021/5/15       
+     * @Time        : 18:55
+     */
+    @RequestMapping(value ="/getToken")
+    public String getToken(@RequestParam("userId") String userId,@RequestParam("timestamp") String timestamp, @RequestParam("random") String random, @RequestParam("sign") String sign) throws NoSuchAlgorithmException {
+        JSONObject result = new JSONObject();
+        if (!clientId.equals(userId)) {
+            result.put("code", 201);
+            result.put("msg", "用户信息错误");
+            return result.toJSONString();
+        }
+        MessageDigest md = MessageDigest.getInstance("MD5");
+        String data = random + ";" + timestamp;
+        String oneSign = Hex.encodeHexString(md.digest(data.getBytes(StandardCharsets.UTF_8)));
+        oneSign = oneSign + "HuiMv";
+        String twoSign = Hex.encodeHexString(md.digest(oneSign.getBytes(StandardCharsets.UTF_8)));
+        if (!sign.equals(twoSign)) {
+            result.put("code", 201);
+            result.put("msg", "加密方式错误");
+            return result.toJSONString();
+        }
+        String token = TokenUtil.sign(userId);
+        System.out.println(token);
+        result.put("code", 200);
+        result.put("accessToken", token);
+        return result.toJSONString();
+    }
+
+    /**
+     * @Method      : getToken
+     * @Description : 
+     * @Params      : [verify]
+     * @Return      : boolean
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2021/5/15       
+     * @Time        : 18:56
+     */
+    @RequestMapping("/verify")
+    public boolean getToken(String verify) {
+        return TokenUtil.verify(verify);
+    }
+}

+ 166 - 0
huimv-hy-production/huimv.hy.erp.datasource/src/main/java/com/huimv/production/datasource/utils/DateUtils.java

@@ -0,0 +1,166 @@
+/**
+ * Copyright (c) 2016-2019 人人开源 All rights reserved.
+ *
+ * https://www.renren.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.huimv.production.datasource.utils;
+
+import org.apache.commons.lang.StringUtils;
+import org.joda.time.DateTime;
+import org.joda.time.LocalDate;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * 日期处理
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+public class DateUtils {
+	/** 时间格式(yyyy-MM-dd) */
+	public final static String DATE_PATTERN = "yyyy-MM-dd";
+	/** 时间格式(yyyy-MM-dd HH:mm:ss) */
+	public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
+
+    /**
+     * 日期格式化 日期格式为:yyyy-MM-dd
+     * @param date  日期
+     * @return  返回yyyy-MM-dd格式日期
+     */
+	public static String format(Date date) {
+        return format(date, DATE_PATTERN);
+    }
+
+    /**
+     * 日期格式化 日期格式为:yyyy-MM-dd
+     * @param date  日期
+     * @param pattern  格式,如:DateUtils.DATE_TIME_PATTERN
+     * @return  返回yyyy-MM-dd格式日期
+     */
+    public static String format(Date date, String pattern) {
+        if(date != null){
+            SimpleDateFormat df = new SimpleDateFormat(pattern);
+            return df.format(date);
+        }
+        return null;
+    }
+
+    /**
+     * 字符串转换成日期
+     * @param strDate 日期字符串
+     * @param pattern 日期的格式,如:DateUtils.DATE_TIME_PATTERN
+     */
+    public static Date stringToDate(String strDate, String pattern) {
+        if (StringUtils.isBlank(strDate)){
+            return null;
+        }
+
+        DateTimeFormatter fmt = DateTimeFormat.forPattern(pattern);
+        return fmt.parseLocalDateTime(strDate).toDate();
+    }
+
+    /**
+     * 根据周数,获取开始日期、结束日期
+     * @param week  周期  0本周,-1上周,-2上上周,1下周,2下下周
+     * @return  返回date[0]开始日期、date[1]结束日期
+     */
+    public static Date[] getWeekStartAndEnd(int week) {
+        DateTime dateTime = new DateTime();
+        LocalDate date = new LocalDate(dateTime.plusWeeks(week));
+
+        date = date.dayOfWeek().withMinimumValue();
+        Date beginDate = date.toDate();
+        Date endDate = date.plusDays(6).toDate();
+        return new Date[]{beginDate, endDate};
+    }
+
+    /**
+     * 对日期的【秒】进行加/减
+     *
+     * @param date 日期
+     * @param seconds 秒数,负数为减
+     * @return 加/减几秒后的日期
+     */
+    public static Date addDateSeconds(Date date, int seconds) {
+        DateTime dateTime = new DateTime(date);
+        return dateTime.plusSeconds(seconds).toDate();
+    }
+
+    /**
+     * 对日期的【分钟】进行加/减
+     *
+     * @param date 日期
+     * @param minutes 分钟数,负数为减
+     * @return 加/减几分钟后的日期
+     */
+    public static Date addDateMinutes(Date date, int minutes) {
+        DateTime dateTime = new DateTime(date);
+        return dateTime.plusMinutes(minutes).toDate();
+    }
+
+    /**
+     * 对日期的【小时】进行加/减
+     *
+     * @param date 日期
+     * @param hours 小时数,负数为减
+     * @return 加/减几小时后的日期
+     */
+    public static Date addDateHours(Date date, int hours) {
+        DateTime dateTime = new DateTime(date);
+        return dateTime.plusHours(hours).toDate();
+    }
+
+    /**
+     * 对日期的【天】进行加/减
+     *
+     * @param date 日期
+     * @param days 天数,负数为减
+     * @return 加/减几天后的日期
+     */
+    public static Date addDateDays(Date date, int days) {
+        DateTime dateTime = new DateTime(date);
+        return dateTime.plusDays(days).toDate();
+    }
+
+    /**
+     * 对日期的【周】进行加/减
+     *
+     * @param date 日期
+     * @param weeks 周数,负数为减
+     * @return 加/减几周后的日期
+     */
+    public static Date addDateWeeks(Date date, int weeks) {
+        DateTime dateTime = new DateTime(date);
+        return dateTime.plusWeeks(weeks).toDate();
+    }
+
+    /**
+     * 对日期的【月】进行加/减
+     *
+     * @param date 日期
+     * @param months 月数,负数为减
+     * @return 加/减几月后的日期
+     */
+    public static Date addDateMonths(Date date, int months) {
+        DateTime dateTime = new DateTime(date);
+        return dateTime.plusMonths(months).toDate();
+    }
+
+    /**
+     * 对日期的【年】进行加/减
+     *
+     * @param date 日期
+     * @param years 年数,负数为减
+     * @return 加/减几年后的日期
+     */
+    public static Date addDateYears(Date date, int years) {
+        DateTime dateTime = new DateTime(date);
+        return dateTime.plusYears(years).toDate();
+    }
+}

+ 90 - 0
huimv-hy-production/huimv.hy.erp.datasource/src/main/java/com/huimv/production/datasource/utils/TokenUtil.java

@@ -0,0 +1,90 @@
+package com.huimv.production.datasource.utils;
+
+
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.auth0.jwt.JWT;
+import com.auth0.jwt.JWTVerifier;
+import com.auth0.jwt.algorithms.Algorithm;
+import com.auth0.jwt.interfaces.DecodedJWT;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.example.demo.util
+ * @Description : TODO
+ * @Author : yuxuexuan
+ * @Create : 2021/2/26 0026 9:06
+ **/
+@Component
+public class TokenUtil {
+
+    private static final long EXPIRE_TIME = 24 * 60 * 60 * 1000;  //有效时长
+    private static final String TOKEN_SECRET = "ben";       // 秘钥
+
+    /**
+     * 签名 生成
+     *
+     * @parm userName
+     */
+    public static String sign(String userName) {
+        String token = null;
+        try {
+            Date expiresAt = new Date(System.currentTimeMillis() + EXPIRE_TIME);
+            token = JWT.create()
+                    .withIssuer("auth0")
+                    .withClaim("userName", userName)
+                    .withExpiresAt(expiresAt)
+                    //使用HMAC256算法加密
+                    .sign(Algorithm.HMAC256(TOKEN_SECRET));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return token;
+    }
+
+    /**
+     * 签名验证
+     *
+     * @param token
+     */
+    public static boolean verify(String token) {
+        try {
+            JWTVerifier verifier = JWT.require(Algorithm.HMAC256(TOKEN_SECRET))
+                    .withIssuer("auth0").build();
+            DecodedJWT jwt = verifier.verify(token);
+            System.out.println("TOKEN过期时间:" + DateUtil.format(jwt.getExpiresAt(), "yyyy-MM-dd HH:mm:ss"));
+            return true;
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
+    /**
+     * @Method      : verifyToken
+     * @Description : 签名验证
+     * @Params      : [token]
+     * @Return      : com.alibaba.fastjson.JSONObject
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2021/5/15       
+     * @Time        : 18:53
+     */
+    public JSONObject verifyToken(String token) {
+        JSONObject resultJo = new JSONObject();
+        try {
+            JWTVerifier verifier = JWT.require(Algorithm.HMAC256(TOKEN_SECRET))
+                    .withIssuer("auth0").build();
+            DecodedJWT jwt = verifier.verify(token);
+            System.out.println("TOKEN过期时间:" + DateUtil.format(jwt.getExpiresAt(), "yyyy-MM-dd HH:mm:ss"));
+            resultJo.put("success",true);
+            return resultJo;
+        } catch (Exception e) {
+            resultJo.put("success",false);
+            resultJo.put("msg",e.getMessage());
+            return resultJo;
+        }
+    }
+}

+ 2 - 0
huimv-hy-production/huimv.hy.erp.datasource/src/main/resources/application.properties

@@ -1 +1,3 @@
 spring.profiles.active=dev
+
+apiService.client= 20210501