<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>4.1.0</version>
</dependency>
create table if not exists `genshin_admin_user`(
`id` varchar(32) primary key not null comment '用户id',
`title` varchar(32) not null comment '头衔',
`name` varchar(32) not null comment '姓名',
`user_name` varchar(32) not null comment '账号',
`sex` int(1) not null comment '0-女 1-男',
`password` varchar(32) not null comment '密码',
`token` varchar(32) not null comment 'token',
`create_time` datetime not null comment '创建时间',
`update_time` datetime not null comment '更新时间'
)engine=InnoDB default charset=utf8mb4;
public class Utill {
public static String getRandomString(int length) {
Random random=new Random();
StringBuilder sb=new StringBuilder();
for(int i=0;i<length;i++) {
int number = random.nextInt(3);
int result = 0;
switch (number) {
case 0:
result = (int) (Math.random() * 25 + 65);
sb.append((char) result);
break;
case 1:
result = (int) (Math.random() * 25 + 97);
sb.append((char) result);
break;
case 2:
sb.append(new Random().nextInt(10));
break;
}
}
return sb.toString();
}
}
@RestController
@Slf4j
@RequestMapping("/user")
public class AdminUserController {
@Autowired
private AdminUserService adminUserService;
@PostMapping("/register")
public GResponse register(@RequestBody AdminUser user) {
String id = Utill.getRandomString(32);
String password = user.getPassword();
String encryption = DigestUtils.md5DigestAsHex(password.getBytes());
LocalDateTime time = LocalDateTime.now();
user.setId(id);
user.setPassword(encryption);
user.setCreateTime(time);
user.setUpdateTime(time);
user.setToken("");
log.info(user.getUserName());
boolean save = adminUserService.save(user);
if (!save) {
return GResponse.error("注册失败!");
}
return GResponse.success("注册成功");
}
}
public class TokenUtil {
private static final long EXPIRE_TIME = 15 * 60 * 1000;
private static final String TOKEN_SECRET = "genshin";
public static String sign(String userId) {
try {
Date expiresAt = new Date(System.currentTimeMillis() + EXPIRE_TIME);
String token = JWT.create()
.withIssuer("auth0")
.withClaim("id","id")
.withClaim("userId",userId)
.withExpiresAt(expiresAt)
.sign(Algorithm.HMAC256(TOKEN_SECRET));
return token;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static Boolean verify(String token) {
try {
JWTVerifier verifier = JWT.require(Algorithm.HMAC256(TOKEN_SECRET)).withIssuer("auth0").build();
verifier.verify(token);
return true;
} catch (Exception e) {
return false;
}
}
public static String getUserIDByToken(String token) {
try {
JWTVerifier verifier = JWT.require(Algorithm.HMAC256(TOKEN_SECRET)).withIssuer("auth0").build();
DecodedJWT decodedVerify = verifier.verify(token);
String issuer = decodedVerify.getIssuer();
String userId = decodedVerify.getClaim("userId").asString();
return userId;
} catch (Exception e) {
return "";
}
}
}
public AdminUser getAdminUserByUserName(String userName);
@Autowired
private AdminUserMapper adminUserMapper;
@Override
public AdminUser getAdminUserByUserName(String userName) {
LambdaQueryWrapper<AdminUser> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(Strings.isNotEmpty(userName),AdminUser::getUserName,userName);
return adminUserMapper.selectOne(lambdaQueryWrapper);
}
@PostMapping("/login")
public GResponse login(@RequestBody AdminUser user) {
String password = user.getPassword();
String encryption = DigestUtils.md5DigestAsHex(password.getBytes());
AdminUser adminUser = adminUserService.getAdminUserByUserName(user.getUserName());
if (adminUser == null) {
return GResponse.error("没找到相关用户!");
}
if (!adminUser.getPassword().equals(encryption)) {
return GResponse.error("密码错误!");
}
String token = TokenUtil.sign(adminUser.getId());
adminUser.setToken(token);
return GResponse.success("登录成功",adminUser);
}
@Slf4j
public class AuthenticationInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String requestURI = request.getRequestURI();
log.info("拦截的请求-: " + requestURI);
String token = request.getHeader("token");
if (token == null || !TokenUtil.verify(token)) {
response.getWriter().write(JSON.toJSONString(GResponse.error("not login!")));
return false;
}
return HandlerInterceptor.super.preHandle(request, response, handler);
}
}