lzy před 2 týdny
rodič
revize
d7fba4bcb3

+ 21 - 14
pom.xml

@@ -30,24 +30,31 @@
             <artifactId>redisson-spring-data-27</artifactId>
             <version>3.23.5</version>
         </dependency>
+
         <dependency>
             <groupId>io.jsonwebtoken</groupId>
-            <artifactId>jjwt-api</artifactId>
-            <version>0.11.5</version>
-        </dependency>
-        <dependency>
-            <groupId>io.jsonwebtoken</groupId>
-            <artifactId>jjwt-impl</artifactId>
-            <version>0.11.5</version>
-            <scope>runtime</scope>
-        </dependency>
-        <dependency>
-            <groupId>io.jsonwebtoken</groupId>
-            <artifactId>jjwt-jackson</artifactId>
-            <version>0.11.5</version>
-            <scope>runtime</scope>
+            <artifactId>jjwt</artifactId>
+            <version>0.9.0</version>
         </dependency>
 
+<!--        <dependency>-->
+<!--            <groupId>io.jsonwebtoken</groupId>-->
+<!--            <artifactId>jjwt-api</artifactId>-->
+<!--            <version>0.11.5</version>-->
+<!--        </dependency>-->
+<!--        <dependency>-->
+<!--            <groupId>io.jsonwebtoken</groupId>-->
+<!--            <artifactId>jjwt-impl</artifactId>-->
+<!--            <version>0.11.5</version>-->
+<!--            <scope>runtime</scope>-->
+<!--        </dependency>-->
+<!--        <dependency>-->
+<!--            <groupId>io.jsonwebtoken</groupId>-->
+<!--            <artifactId>jjwt-jackson</artifactId>-->
+<!--            <version>0.11.5</version>-->
+<!--            <scope>runtime</scope>-->
+<!--        </dependency>-->
+
         <dependency>
             <groupId>commons-io</groupId>
             <artifactId>commons-io</artifactId>

+ 68 - 0
src/main/java/com/futu/course/common/utils/Md5Utils.java

@@ -0,0 +1,68 @@
+package com.futu.course.common.utils;
+import java.security.MessageDigest;
+import java.util.Random;
+
+/**
+ * @version 1.0
+ * @Author ZZX
+ * @Date 2022/12/19 17:35
+ */
+public class Md5Utils {
+    /**
+     * md5 加密
+     *
+     * @param saltAndPwd
+     * @return
+     */
+    public static String encode(String saltAndPwd) {
+        try {
+            return
+                    toHex(MessageDigest.getInstance("MD5").digest(saltAndPwd.getBytes("UTF-8"))).toLowerCase();
+        } catch (Exception e) {
+            throw new RuntimeException("md5 加密", e);
+        }
+    }
+    /**
+     * 十六进制字符
+     */
+    private static final char[] HEX_CHARS =
+            "0123456789ABCDEF".toCharArray();
+    /**
+     * 转换为十六进制字符串
+     *
+     * @param bytes
+     * @return
+     */
+    private static String toHex(byte[] bytes) {
+        StringBuilder str = new StringBuilder(bytes.length * 2);
+        final int fifteen = 0x0f;//十六进制中的 15
+        for (byte b : bytes) {//byte 为 32 位
+            str.append(HEX_CHARS[(b >> 4) & fifteen]);//获取第 25 位到第 28 位的二进制数
+            str.append(HEX_CHARS[b & fifteen]);//获取第 29 位到第 32 位的二进制数
+        }
+        return str.toString();
+    }
+    /**
+     * 随机生成10位密码盐
+     * @return
+     */
+    public static String getSalt() {
+        char[] chars =
+                ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" +
+                        "1234567890!@#$%^&*()_+").toCharArray();
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < 30; i++) {
+            //Random().nextInt()返回值为[0,n)
+            char aChar = chars[new Random().nextInt(chars.length)];
+            sb.append(aChar);
+        }
+        return sb.toString();
+    }
+    // 测试
+    public static void main(String[] args) {
+        String salt = getSalt();// get the salt
+        String pwd = "123456";// the inital pwd
+        String saltPwd = encode(salt + pwd);//calculate the new-pwd by the salt and the inital pwd
+        System.out.println(saltPwd);// sout to test
+    }
+}

+ 10 - 0
src/main/java/com/futu/course/orders/service/Order1Service.java

@@ -10,4 +10,14 @@ import com.baomidou.mybatisplus.extension.service.IService;
 */
 public interface Order1Service extends IService<Order1> {
 
+
+
+//    订单
+
+
+
+
+
+
+
 }

+ 11 - 1
src/main/java/com/futu/course/user/controller/UserController.java

@@ -2,6 +2,8 @@ package com.futu.course.user.controller;
 
 
 
+import com.futu.course.common.utils.ThreadLocalUtil;
+import com.futu.course.user.dto.TokenDto;
 import com.futu.course.user.service.impl.UserServiceImpl;
 import io.minio.errors.*;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -54,7 +56,15 @@ public class UserController {
     @NonLoginRequired
     @PostMapping("login")
     public R login(@RequestBody UserLoginDto dto) throws InterruptedException {
-        return userService.login(dto);
+        R login = userService.login(dto);
+        return login;
+    }
+
+    @NonLoginRequired
+    @PostMapping("get_login_user")
+    public R getLoginUser(@RequestBody TokenDto token) {
+        R loginUser = userService.getLoginUser(token);
+        return loginUser;
     }
 
 

+ 3 - 0
src/main/java/com/futu/course/user/service/UserService.java

@@ -2,6 +2,7 @@ package com.futu.course.user.service;
 
 import com.futu.course.user.domain.User;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.futu.course.user.dto.TokenDto;
 import com.futu.course.user.dto.UserDTO;
 import com.futu.course.user.dto.UserLoginDto;
 import com.futu.course.common.entity.R;
@@ -20,5 +21,7 @@ public interface UserService extends IService<User> {
 
     R login(UserLoginDto dto) throws InterruptedException;
 
+    R getLoginUser(TokenDto token);
+
 
 }

+ 54 - 31
src/main/java/com/futu/course/user/service/impl/UserServiceImpl.java

@@ -5,8 +5,12 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.futu.course.common.utils.Md5Utils;
+import com.futu.course.common.utils.ThreadLocalUtil;
+import com.futu.course.common.utils.TokenUtils;
 import com.futu.course.minio.service.impl.FileServiceImpl;
 import com.futu.course.user.domain.User;
+import com.futu.course.user.dto.TokenDto;
 import com.futu.course.user.service.UserService;
 import com.futu.course.user.mapper.UserMapper;
 import io.minio.errors.*;
@@ -18,9 +22,7 @@ import com.futu.course.common.utils.SnowflakeIdWorker;
 import com.futu.course.user.dto.LoginDTO;
 import com.futu.course.user.dto.UserDTO;
 import com.futu.course.user.dto.UserLoginDto;
-import io.jsonwebtoken.Jwts;
-import io.jsonwebtoken.SignatureAlgorithm;
-import io.jsonwebtoken.security.Keys;
+
 import org.apache.commons.codec.binary.Base64;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
@@ -114,13 +116,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User>
             if(users.size() > 0) {
                 User user = users.get(0);
                 // 生成一个 256 位(32 字节)的安全密钥
-                SecretKey key = Keys.secretKeyFor(SignatureAlgorithm.HS256);
-                // 使用密钥生成 JWT
-                String jws = Jwts.builder()
-                        .setSubject(user.getId().toString())
-                        .signWith(key)
-                        .compact();
-                user.setToken(jws);
+                String jwtToken = TokenUtils.createJwtToken(user.getId().toString());
+                user.setToken(jwtToken);
                 redisTemplate.opsForValue().set("user",user,1, TimeUnit.DAYS);
                 return R.ok(user);
             }
@@ -146,16 +143,22 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User>
                 user.setUsername(dto.getWxUsername());
                 user.setNickname(dto.getWxUsername());
                 user.setId(worker.nextId());
-                user.setPassword(null);
+
+//              默认密码是123456
+                String salt = Md5Utils.getSalt();
+                String encode = Md5Utils.encode("123456" + salt);
+                user.setPassword(encode);
+                user.setSalt(salt);
+
+
+
+
+//                user.setPassword(null);
                 // 生成一个 256 位(32 字节)的安全密钥
-                SecretKey key = Keys.secretKeyFor(SignatureAlgorithm.HS256);
-                // 使用密钥生成 JWT
-                String jws = Jwts.builder()
-                        .setSubject(user.getId().toString())
-                        .signWith(key)
-                        .compact();
-                user.setToken(jws);
+                String jwtToken = TokenUtils.createJwtToken(user.getId().toString());
+                user.setToken(jwtToken);
                 userMapper.insert(user);
+
                 redisTemplate.opsForValue().set("user",user,1, TimeUnit.DAYS);
                 return R.ok(user);
             }
@@ -191,20 +194,26 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User>
                 return R.restResult(null,500,"用户不存在");
             }
             String salt = user.getSalt();
-            String password = dto.getPassword();
-            String hex = DigestUtils.md5DigestAsHex((salt + password).getBytes());
-            if (hex.equals(user.getPassword()))
+//            输入的加密密码
+            String encode = Md5Utils.encode(dto.getPassword() + salt);
+            System.err.println(encode);
+            //            数据库的加密密码
+            String password = user.getPassword();
+            System.err.println(password);
+            if (encode.equals(password))
             {
-                // 生成一个 256 位(32 字节)的安全密钥
-                SecretKey key = Keys.secretKeyFor(SignatureAlgorithm.HS256);
-                // 使用密钥生成 JWT
-                String jws = Jwts.builder()
-                        .setSubject(user.getId().toString())
-                        .signWith(key)
-                        .compact();
-                user.setToken(jws);
-                redisTemplate.opsForValue().set("user",user,1, TimeUnit.DAYS);
-                return R.ok(user);
+                String jwtToken = TokenUtils.createJwtToken(user.getId().toString());
+                System.err.println(jwtToken);
+//                // 生成一个 256 位(32 字节)的安全密钥
+//                SecretKey key = Keys.secretKeyFor(SignatureAlgorithm.HS256);
+//                // 使用密钥生成 JWT
+//                String jws = Jwts.builder()
+//                        .setSubject(user.getId().toString())
+//                        .signWith(key)
+//                        .compact();
+//                user.setToken(jws);
+//                redisTemplate.opsForValue().set("user",user,1, TimeUnit.DAYS);
+                return R.ok(jwtToken);
             }
 
         }catch (Exception e)
@@ -259,7 +268,21 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User>
 
 
 
+    @Override
+    public R getLoginUser(TokenDto token) {
+
+        //解析token
+        Long userId = TokenUtils.getUserId(token.getToken());
 
+        System.out.println(userId);
+        if (userId != null)
+        {
+            User user = userMapper.selectById(userId);
+            ThreadLocalUtil.set(user.getId());
+            return R.ok(user);
+        }
+        return null;
+    }
 
 
 

+ 3 - 1
接口文档.txt

@@ -3,4 +3,6 @@
    MysqlInterES          无                无              同步mysql中的数据   get      /EsCourse/MysqlInterES
    CourseList         int categoryId  HashSet<ESCourse>    课程分类查询所有    Post     /EsCourse/CourseList
    SelCourse          String name     HashSet<ESCourse>     课程的搜索        Post     /EsCourse/SelCourse
-   checkAndCreateIndex  无              boolean           ES索引结构初始化     Get      /EsCourse/checkAndCreateIndex
+   checkAndCreateIndex  无              boolean           ES索引结构初始化     Get      /EsCourse/checkAndCreateIndex
+
+

+ 1 - 0
获取用户id

@@ -0,0 +1 @@
+使用          ThreadLocalUtil.get();          获取用户id