package com.yuanchu.tms.controller; import com.yuanchu.tms.pojo.User; import com.yuanchu.tms.service.UserService; import com.yuanchu.tms.utils.JackSonUtil; import com.yuanchu.tms.utils.Jwt; import com.yuanchu.tms.utils.RedisUtil; import com.yuanchu.tms.vo.Result; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.Map; @RequestMapping("/user") @RestController @Api(tags = "用户模块") public class UserController { @Autowired UserService userService; @Autowired private Jwt jwt; @ApiOperation(value = "登录") @PostMapping("/enter") public Result login(String account, String password) { User user = userService.selectUserByPwd(account, password); if (user==null) return Result.fail("登录失败"); String jwtToken = jwt.createJwt(user.getName(), user.getId(), 60); String jwtReToken = jwt.createJwt(user.getName(), user.getId(), 24 * 60); RedisUtil.set("" + user.getId(), jwtToken, 60); RedisUtil.set(user.getId() + "Re", jwtReToken, 24 * 60); Map map = new HashMap<>(); map.put("token", jwtToken); map.put("reToken", jwtReToken); map.put("name", user.getName()); return Result.success("登录成功", map); } @ApiOperation(value = "token刷新") @PostMapping("/refresh") public Result refresh(String reToken) throws Exception { Map map = new Jwt().readJWT(reToken); Map maps = JackSonUtil.unmarshal(map.get("data"), Map.class); if (map.get("state").equals("0")) { String redisToken = String.valueOf(RedisUtil.get(maps.get("id") + "Re")); if (!redisToken.equals(reToken)) { return Result.success("不存在的token", "1"); } else if (redisToken.equals(reToken)) { int id = Integer.parseInt(maps.get("id").replaceAll("\"", "")); String name = maps.get("name").replaceAll("\"", ""); String jwtToken = jwt.createJwt(name, id, 60); String jwtReToken = jwt.createJwt(name, id, 24 * 60); RedisUtil.set("" + id, jwtToken, 60); RedisUtil.set(id + "Re", jwtReToken, 24 * 60); Map map1 = new HashMap<>(); map1.put("token", jwtToken); map1.put("reToken", jwtReToken); return Result.success("刷新成功", map1); } } return Result.fail(map.get("info")); } }