🎼个人主页:【Y小夜】
😎作者简介:一位双非学校的大三学生,编程爱好者,
专注于基础和实战分享,欢迎私信咨询!
🎈热门专栏:🎊【Python,Javaweb,Springboot】
感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️
目录
🎈创建工程引入依赖
首先自己先建立一个Springboot工程,直接引入一些所需要的依赖。
下面是我自己的依赖
<!-- 自动添加的-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.4</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter-test</artifactId>
<version>3.0.4</version>
<scope>test</scope>
</dependency>
<!-- MyBatisPlus核心库-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.5</version>
</dependency>
<!-- SpringUtils工具-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.5</version>
</dependency>
<!-- redis工具-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- jwt依赖-->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.8.3</version>
</dependency>
<!-- json工具-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.45</version>
</dependency>
创建工程后,生成的格式
🎈进行配置
将配置文件改为application.yml
server:
port: 8080
spring:
application:
name: one
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/one?useSSL=false&serverTimezone=UTC
username: root
password: 密码
data:
redis:
host: localhost
port: 6379
password: 密码
lettuce:
pool:
max-active: 10
max-idle: 10
min-idle: 1
time-between-eviction-runs: 10s
database: 1
jackson:
default-property-inclusion: non_null # JSON处理时忽略非空字段
mybatis-plus:
type-aliases-package: com.hmdp.entity # 别名扫描包
🎈编写代码
🎉编写实体类
创建entity包,编写User类
package com.yan.one.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("user")
//允许链式调用set方法
@Accessors(chain = true)
public class User {
private String id;
private String name;
private String password;
}
这里注意,有可能lombok这些注释后面没有办法使用,所以记得提前将pom.xml中的自动生成的lombok插件进行初始掉。
🎉编写工具类
✨Result类
package com.yan.one.utils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
private Boolean success;
private String errorMsg;
private Object data;
private Long total;
public static Result ok(){
return new Result(true,null,null,null);
}
public static Result ok(Object data){
return new Result(true, null, data, null);
}
public static Result ok(List<?> data, Long total){
return new Result(true, null, data, total);
}
public static Result fail(String errorMsg){
return new Result(false, errorMsg, null, null);
}
}
✨JWTUtils类
package com.yan.one.utils;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import java.util.Calendar;
import java.util.Map;
public class JWTUtils {
//设置签名常量
private static final String SING="YSA";
/**
* 生成token
* @param map
* @return
*/
public static String getToken(Map<String,String> map){
//获取当前时间实例
Calendar instance = Calendar.getInstance();
//设置有效时间
instance.add(Calendar.HOUR,10);
//创建jWT构造器
JWTCreator.Builder builder = JWT.create();
// 将传入的声明添加到payload
map.forEach(builder::withClaim);
// 指定过期时间和签名算法
String token = builder.withExpiresAt(instance.getTime()).sign(Algorithm.HMAC256(SING));
return token;
}
/**
* 验证token
* @param token
* @return
*/
public static DecodedJWT verify(String token){
return JWT.require(Algorithm.HMAC256(SING)).build().verify(token);
}
}
🎉编写业务类
✨IUserService类
package com.yan.one.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yan.one.entity.User;
import com.yan.one.utils.Result;
public interface IUserService extends IService<User> {
// 登录功能开发
Result login(User user);
}
✨UserMapper类
package com.yan.one.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yan.one.entity.User;
import org.apache.ibatis.annotations.Mapper;
public interface UserMapper extends BaseMapper<User> {
}
✨UserServiceImpl类
package com.yan.one.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yan.one.entity.User;
import com.yan.one.mapper.UserMapper;
import com.yan.one.service.IUserService;
import com.yan.one.utils.JWTUtils;
import com.yan.one.utils.Result;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.concurrent.TimeUnit;
@Service
@Slf4j
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
@Resource
private StringRedisTemplate stringRedisTemplate;
//登录功能开发
@Override
public Result login(User user) {
String name=user.getName();
String password=user.getPassword();
User user1=query().eq("name",name).eq("password",password).one();
if (user1==null){
return Result.fail("登录失败");
}
HashMap<String, String> map = new HashMap<>();
map.put("name",name);
map.put("password",password);
//生成jwt令牌
String token = JWTUtils.getToken(map);
//将令牌存入redis中
String id = user1.getId();
stringRedisTemplate.opsForValue().set("Usr_"+id,token,2L, TimeUnit.HOURS);
map.put("token",token);
return Result.ok(map);
}
}
🎉编写JWT测试类
package com.yan.one;
import com.yan.one.utils.JWTUtils;
import org.junit.jupiter.api.Test;
import java.util.HashMap;
import java.util.Map;
public class JWTTest {
@Test
public void test1(){
Map<String, String> map=new HashMap<>();
map.put("1","123456");
String token= JWTUtils.getToken(map);
System.out.println(token);
}
@Test
public void test2(){
String s="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyIxIjoiMTIzNDU2IiwiZXhwIjoxNzM5MTE0NjkyfQ.xy58bv16MwjrdaKUm44a14dkCs1M48jwrvPZV0XGKxs";
System.out.println(JWTUtils.verify(s));
}
}
🎈构建数据库
创建one数据库,然后创建user表,插入一条数据
最后使用apifox进行测试
{
"name": "aaa",
"password": "123"
}
测试成功!
redis中也有数据