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

Spring boot 简单开发接口

spring boot 开发简单接口

        • 1. 首先我们先把 package 的结构创建好 package com.
        • 2.在pojo放实体类 (实体类中的@Data注解是来源于lombok用于省略get set)
        • 3.在Mapper 中编写 登录和注册方法
        • 4. 在Service中 添加 UserService 重写 mapper 中的方法 (降低了代码耦合度)
        • 5. 在 Service 下的 Impl 包中,添加 UserServiceImpl 类来实现 UserService 接口并依赖 UserMapper 接口
        • 6. 在controller中编写登录和注册、查询用户详细信息的接口

springboot 开发用户登录 用户注册 和 获取 用户信息 接口

1. 首先我们先把 package 的结构创建好 package com.
	com/
└── YJZE/├── controller/│   └── ...├── mapper/│   └── ...├── pojo/│   └── ...├── service/│   └── ...└── service/│    └── Impl/│        └── ...└──utils/└──...       
<!-- 需要在pom.xml配置的文件 -->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.3</version></parent><groupId>com.YJZE</groupId><artifactId>big-event</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><name>big-event</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><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.3</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.34</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>4.4.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency></dependencies>
</project>
2.在pojo放实体类 (实体类中的@Data注解是来源于lombok用于省略get set)
//放User实体类 用于登录和注册、查询用户信息
package com.YJZE.pojo;import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;import java.time.LocalDateTime;@Data
public class User {private Integer id;//主键IDprivate String username;//用户名@JsonIgnore //此注解用于指示 Jackson 库在将对象序列化为 JSON 时忽略该字段。private String password;//密码private String nickname;//昵称private String email;//邮箱private String userPic;//用户头像地址private LocalDateTime createTime;//创建时间private LocalDateTime updateTime;//更新时间}//放Result实体类 用在请求成功后 中data和message的显示
package com.YJZE.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;//统一响应结果
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Result<T> {private Integer code;//业务状态码  0-成功  1-失败private String message;//提示信息private T data;//响应数据//快速返回操作成功响应结果(带响应数据)public static <E> Result<E> success(E data) {return new Result<>(0, "操作成功", data);}//快速返回操作成功响应结果public static Result success() {return new Result(0, "操作成功", null);}public static Result error(String message) {return new Result(1, message, null);}
}
3.在Mapper 中编写 登录和注册方法
package com.YJZE.mapper;import com.YJZE.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;@Mapper
public interface UserMapper {@Select("select * from user where username = #{username}") //用于注册用户查重 和 登录时校验 passwordUser findByUserName(String username);@Select("insert  into  user(username,password,create_time,update_time)" + "values (#{username},#{password},now(),now())")void add(String username, String password); //注册用户
//    User findByUserName(String username);
}
4. 在Service中 添加 UserService 重写 mapper 中的方法 (降低了代码耦合度)
package com.YJZE.service;import com.YJZE.mapper.UserMapper;
import com.YJZE.pojo.User;
import org.springframework.stereotype.Service;@Service
public interface UserService {//根据用户名查询用户User findByUserName(String username);//注册用户void register(String username, String password);
}
5. 在 Service 下的 Impl 包中,添加 UserServiceImpl 类来实现 UserService 接口并依赖 UserMapper 接口
package com.YJZE.service.Impl;import com.YJZE.mapper.UserMapper;
import com.YJZE.pojo.User;
import com.YJZE.service.UserService;
import com.YJZE.utils.Md5Util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic User findByUserName(String username) {User u = userMapper.findByUserName(username);return u;}@Overridepublic void register(String username, String password) {//加密//md5String md5String = Md5Util.getMD5String(password);userMapper.add(username,md5String);//添加}
}
6. 在controller中编写登录和注册、查询用户详细信息的接口
package com.YJZE.controller;import com.YJZE.pojo.Result;
import com.YJZE.pojo.User;
import com.YJZE.service.UserService;
import com.YJZE.utils.JwtUtil;
import com.YJZE.utils.Md5Util;
import jakarta.validation.constraints.Pattern;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;import java.util.HashMap;
import java.util.Map;/*** 用户控制器*/
@RestController
@RequestMapping("/user") // 设置请求路径前缀为 /user
@Validated // 开启参数校验
public class UserController {@Autowired // 自动注入UserServiceprivate UserService userService;/*** 用户注册接口* @param username 用户名,长度为5-16位,不能包含空格* @param password 密码,长度为5-16位,不能包含空格* @return 注册结果*/@PostMapping("/register")public Result register(@Pattern(regexp = "^\\S{5,16}$") String username, @Pattern(regexp = "^\\S{5,16}$") String password) {// 查询用户是否存在User user = userService.findByUserName(username);if (user == null) {// 用户不存在,执行注册操作userService.register(username, password);return Result.success(); // 注册成功} else {return Result.error("用户名被占用"); // 用户名已存在}}/*** 用户登录接口* @param username 用户名,长度为5-16位,不能包含空格* @param password 密码,长度为5-16位,不能包含空格* @return 登录结果,包含JWT Token*/@PostMapping("/login")public Result<String> login(@Pattern(regexp = "^\\S{5,16}$") String username, @Pattern(regexp = "^\\S{5,16}$") String password) {User loginUser = userService.findByUserName(username);if (loginUser == null) {return Result.error("用户名错误"); // 用户名不存在}// 验证密码if (Md5Util.getMD5String(password).equals(loginUser.getPassword())) {// 密码正确,生成JWT TokenMap<String, Object> claims = new HashMap<>();claims.put("id", loginUser.getId());claims.put("username", loginUser.getUsername());String token = JwtUtil.genToken(claims);return Result.success(token); // 登录成功,返回Token}return Result.error("密码错误"); // 密码错误}/*** 获取用户信息接口* @param token JWT Token,从请求头Authorization获取* @return 用户信息*/@GetMapping("/userInfo")public Result<User> userinfo(@RequestHeader(name = "Authorization") String token) {// 解析JWT Token获取用户名Map<String, Object> map = JwtUtil.parseToken(token);String username = (String) map.get("username");// 根据用户名查询用户信息User user = userService.findByUserName(username);return Result.success(user); // 返回用户信息}
}
//在utils工具包里面添加 MD5加密密码 和 JWt 用于用户登录后返回token
package com.YJZE.utils;import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;import java.util.Date;
import java.util.Map;public class JwtUtil {private static final String KEY = "itheima";//接收业务数据,生成token并返回public static String genToken(Map<String, Object> claims) {return JWT.create().withClaim("claims", claims).withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 12)).sign(Algorithm.HMAC256(KEY));}//接收token,验证token,并返回业务数据public static Map<String, Object> parseToken(String token) {return JWT.require(Algorithm.HMAC256(KEY)).build().verify(token).getClaim("claims").asMap();}}package com.YJZE;import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.junit.jupiter.api.Test;import java.util.Date;
import java.util.HashMap;
import java.util.Map;public class JwtTest {@Testpublic  void testGEn(){Map<String,Object> claims = new HashMap<>();claims.put("id",1);claims.put("username","张三");String token = JWT.create().withClaim("user",claims).withExpiresAt(new Date(System.currentTimeMillis())).sign(Algorithm.HMAC256("itheima"));//指定算吗System.out.println(token);}@Testpublic void textParse(){//定义字符串模拟tokenString token =  "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9." +"eyJ1c2VyIjp7I mlkIjoxLCJ1c2VybmFtZSI6IuW8oOS4iSJ9LCJleHAiOjE3NDY4ODM3NzZ9" +".qK-oXtJqEhzdp8Sa0JgSojky_DH_sEBBFyF3Vtv-HOs";JWTVerifier jw = JWT.require(Algorithm.HMAC256("itheima")).build();DecodedJWT decodedJWT = jw.verify(token);Map<String, Claim> claims = decodedJWT.getClaims();System.out.println(claims.get("user"));//如果篡改了头部和载荷的数据 验证事变//token}
}

注意
如有错误请告知
如有侵权请带着截图发邮件
邮箱 1413229255@qq.com

相关文章:

  • 超详细fish-speech本地部署教程
  • LLaVA:开源多模态大语言模型深度解析
  • 数据结构中的栈与队列:原理、实现与应用
  • C++GO语言微服务和服务发现②
  • 【Bootstrap V4系列】学习入门教程之 组件-表单(Forms)高级用法(二)
  • Java数据结构——二叉树
  • 封装 RabbitMQ 消息代理交互的功能
  • 【C++ Qt】容器类(GroupBox、TabWidget)内附思维导图 通俗易懂
  • 【算法-哈希表】常见算法题的哈希表套路拆解
  • 【Linux系列】跨平台安装与配置 Vim 文本编辑器
  • SierraNet协议分析使用指导[RDMA]| 如何设置 NVMe QP 端口以进行正确解码
  • Eclipse 插件开发 6 右键菜单
  • Web自动化测试入门详解
  • 街景主观感知全流程(自建数据集+两两对比程序+Trueskill计算评分代码+训练模型+大规模预测)27
  • 使用谱聚类将相似度矩阵分为2类
  • OpenAI的商业化之路:从非营利到盈利的转型
  • 【金仓数据库征文】金仓数据库KingbaseES: 技术优势与实践指南(包含安装)
  • 蓝牙SDP协议概述
  • 5.8线性动态规划2
  • gitkraken 使用教程
  • 江苏省委社会工作部部长等多人拟在省志愿服务联合会任职
  • 时代中国控股:前4个月销售额18.1亿元,境外债重组协议押后聆讯至5月底
  • 深圳市政协原副主席王幼鹏被“双开”
  • 4月证券私募产品备案量创23个月新高,股票策略占比超六成
  • 理财经理泄露客户信息案进展:湖南省检受理申诉,证监会交由地方监管局办理
  • 又一日军“慰安妇”制度受害者去世,大陆登记在册幸存者仅剩7人