当前位置: 首页 > news >正文

Springboot3+vue3从0到1开发实战项目(二)

前面完成了注册功能这次就来写登录功能, 还是按照这个方式来

明确需求: 登录接口

前置工作 : 想象一下登录界面(随便在百度上找一张) 看前端的能力咋样了, 现在我们不管后端看要什么参数就好

 阅读接口文档

请求路径   请求方式  请求参数    响应数据

思路分析:

登录和注册是一个完整项目的必要功能,登录看接口文档给出的账号密码都需要进行校验,以及要想到在未登录的情况下能不能访问网页的其他页面并且查询到数据,所以这里要准备jwt做一个认证,登录成功后生成token,利用这个令牌才能访问其他页面

准备开发

首先导入jwt的maven依赖

		<!--java-jwt坐标--><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>4.4.0</version></dependency>

 包com.zhou.utils / JwtUtil.java 工具类

public class JwtUtil {private static final String KEY = "zhousir"; // 秘钥//接收业务数据,生成token并返回public static String genToken(Map<String, Object> claims) {// 生成tokenreturn JWT.create().withClaim("claims", claims)//  用户数据.withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60 )).sign(Algorithm.HMAC256(KEY));}//接收token,验证token,并返回业务数据public static Map<String, Object> parseToken(String token) {return JWT.require(Algorithm.HMAC256(KEY)) // 创建验证器.build().verify(token) // 验证token.getClaim("claims")// 获取载荷.asMap();}}

验证令牌,验证token   com.zhou.interceptors.LoginInterceptor

@Component
public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {return false;}
}

拦截器com.zhou.config.WebConfig

登录注册接口放行

@Configuration
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate LoginInterceptor loginInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {//登录接口和注册接口不拦截registry.addInterceptor(loginInterceptor).excludePathPatterns("/user/login","/user/register");}
}

接下来就是要写接口了,第一篇写过了

使用的是UserService中根据用户名查询用户的方法

然后UserServiceImpl实现方法

然后UserMapper里面写sql

在controller包中UserController创建登录接口

    /*** 登录功能*/@PostMapping("/login")public Result Login(@Pattern(regexp = "^\\${5,16}$") String username, @Pattern(regexp = "^\\${5,16}$") String password) {// 根据用户名查询UserUser loginUser = userService.findByUsername(username);if (loginUser == null) {return Result.error(1,"用户名或密码错误!!!");}// 判断密码是否正确if (Md5Util.getMD5String(password).equals(loginUser.getPassword())){// 登录成功Map<String,Object> mapuer = new HashMap<>();mapuer.put("id",loginUser.getId());mapuer.put("username",loginUser.getUsername());// 获取tokenString token = JwtUtil.genToken(mapuer);return Result.success(token,"登录成功");}return  Result.error(1,"用户名或密码错误!!!");}

 测试

结语:

后面就简单了就是常用的增删改查会用到ThreadLocal本地线程来存储数据,获取数据,也会用到redis

http://www.lryc.cn/news/250791.html

相关文章:

  • Spring中Bean的生命周期
  • IndexOutOfBoundsException: Index: 2048, Size: 2048] Controller接收对象集合长度超过2048错误
  • 2023年中国消费金融行业研究报告
  • 深度学习:什么是知识蒸馏(Knowledge Distillation)
  • 【Go】protobuf介绍及安装
  • c语言编程题经典100例——(41~45例)
  • 计算机毕业设计|基于SpringBoot+MyBatis框架健身房管理系统的设计与实现
  • java学习part27线程死锁
  • (二)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • 区间预测 | Matlab实现BP-KDE的BP神经网络结合核密度估计多变量时序区间预测
  • LD_PRELOAD劫持、ngixn临时文件、无需临时文件rce
  • 循环神经网络训练情感分析
  • 如何绕过某讯手游保护系统并从内存中获取Unity3D引擎的Dll文件
  • 【C/C++笔试练习】公有派生、构造函数内不执行多态、抽象类和纯虚函数、多态中的缺省值、虚函数的描述、纯虚函数的声明、查找输入整数二进制中1的个数、手套
  • Linux shell中的函数定义、传参和调用
  • YoloV8改进策略:基于RevCol,可逆的柱状神经网络的完美迁移,YoloV8的上分利器
  • 九章量子计算机:引领量子计算的新篇章
  • 什么是vue的计算属性
  • Linux中文件的打包压缩、解压,下载到本地——zip,tar指令等
  • C语言——深入理解指针(4)
  • Linux基础命令(超全面,建议收藏!)
  • LeetCode刷题---合并两个有序链表
  • SQL Server 2008 使用concat报错
  • 视频后期效果制作工具Mocha Pro 2022 Plugins mac中文版软件介绍
  • 人工智能时代:AIGC的横空出世
  • 基于ChatGPT等大模型快速爬虫提取网页内容
  • JavaScript WebAPI(三)(详解)
  • LeetCode哈希表:最长连续序列
  • SpringBoot+redis实现接口防刷
  • 5G承载网和大客户承载的演进