版权声明:本文为博主原创文章,如果转载请给出原文链接:http://doofuu.com/article/4156299.html
2024-11-19 11:13 分类:毕设教程_分享微信小程序,Java,php,python毕业设计系统,springboot,爬虫,数据分析可视化等毕业设计作品案例 作者:云诺 阅读(31)
这是本人帮别人代做的二手商城毕业设计系统,使用SpringBoot框架+Mysql数据库开发完成。前前后后差不多耗时3周。从框架搭建,页面制作,数据库设计以及后台逻辑和接口都是由本人亲自完成。不过该同学对应二手商城毕设系统一窍不通。编程基础也很差,毕业论文也不得不找我来代写,为了更详细的了解系统的设计和实现细节,问了我很多关于SpringBoot的二手商城毕设系统的问题,联想到应该有很多同学跟他一样,所以,最近有时间就把我开发中怎么实现一个功能的技术细节以及对整个系统功能进行拆分讲解的方式写下来,希望能帮助到更多的人。好了,下面就来看看基于Java SpringBoot的二手商城毕设系统的登录功能是怎么实现的吧。
Spring Boot实现二手商城的登录功能实现流程,设计用户表存储用户名和加密密码;利用JPA操作数据库,结合Spring Security进行密码加密和校验;采用JWT生成Token实现无状态认证;创建服务层处理用户注册、登录及验证逻辑,控制器接收用户登录请求并返回Token;配置安全策略开放登录接口,其余接口需认证。
JWT (JSON Web Token) 是一种轻量级的安全令牌。以下是具体实现和细节:
JwtUtil 核心逻辑:
生成 Token (generateToken)
使用io.jsonwebtoken
包提供的Jwts.builder()
方法。
使用用户名作为 subject。
设定签发时间和过期时间。
签名算法:HS256。
解析Token (parseToken)
验证 Token 的合法性(是否被伪造)。
提取其中的Claims
数据。
验证 Token 是否过期 (isTokenExpired)
检查Claims
的过期时间是否早于当前时间。
核心代码如下
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class JwtUtil {
private static final String SECRET_KEY = "secret_key"; // 密钥
private static final long EXPIRATION_TIME = 86400000; // Token有效期(1天)
// 生成 Token
public static String generateToken(String username) {
return Jwts.builder()
.setSubject(username) // 设置主体
.setIssuedAt(new Date()) // 签发时间
.setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME)) // 过期时间
.signWith(SignatureAlgorithm.HS256, SECRET_KEY) // 签名
.compact();
}
// 解析 Token
public static Claims parseToken(String token) {
return Jwts.parser()
.setSigningKey(SECRET_KEY) // 验证签名
.parseClaimsJws(token)
.getBody();
}
// 检查是否过期
public static boolean isTokenExpired(String token) {
return parseToken(token).getExpiration().before(new Date());
}
}
User
是 @Entity 注解的 JPA 实体,用于映射数据库表。每个字段都和 user
表一一对应:
import jakarta.persistence.*;
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // 主键自增
private Long id;
@Column(nullable = false, unique = true) // 用户名唯一
private String username;
@Column(nullable = false) // 密码不能为空
private String password;
private String email; // 邮箱字段
// Getters 和 Setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
核心逻辑:
接收用户的登录请求,获取用户名和密码。
调用UserService
验证用户名是否存在,以及密码是否匹配。
登录成功生成Token
并返回;否则返回错误信息。
完整代码:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("/api/auth")
public class AuthController {
@Autowired
private UserService userService;
@PostMapping("/login")
public ResponseEntity<?> login(@RequestBody Map<String, String> loginRequest) {
String username = loginRequest.get("username"); // 提取用户名
String password = loginRequest.get("password"); // 提取密码
// 查找用户
return userService.findByUsername(username)
.map(user -> {
// 校验密码
if (userService.checkPassword(password, user.getPassword())) {
// 生成 JWT Token
String token = JwtUtil.generateToken(username);
Map<String, String> response = new HashMap<>();
response.put("token", token); // 返回 Token
return ResponseEntity.ok(response);
} else {
return ResponseEntity.status(401).body("Invalid password");
}
})
.orElse(ResponseEntity.status(404).body("User not found"));
}
}
主要功能:
查找用户
findByUsername
。
用户注册时对密码加密存储save
。
验证密码是否匹配checkPassword
。
实现代码:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import java.util.Optional;
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); // 加密器
// 根据用户名查找用户
public Optional<User> findByUsername(String username) {
return userRepository.findByUsername(username);
}
// 保存用户(注册时使用)
public User save(User user) {
user.setPassword(passwordEncoder.encode(user.getPassword())); // 加密存储密码
return userRepository.save(user);
}
// 验证密码
public boolean checkPassword(String rawPassword, String encodedPassword) {
return passwordEncoder.matches(rawPassword, encodedPassword); // 匹配明文和加密密码
}
}
好了,登录功能实现代码部分还是非常简单,逻辑也比较清晰。本次SpringBoot的二手商城毕设系统登录功能实现从用户登录流程、服务层细节、控制器实现以及页面制作到逻辑实现都很合理,来看看登录页面的最终效果吧。(由于同学是国外的留学生毕设,所以整个页面都是英文的噢)
关于博主: 🙉 🙉 10年+互联网经验曾在网易、中兴、百度等厂工作过,目前就职于酷狗公司。使用过Java、Go、小程序、Python、Php等技术语言开发过中大型项目,技术栈丰富,擅长全栈开发。目前专注于毕业项目定制、全栈讲解、技术选型等毕设服务辅导。擅长爬虫、微服务、小程序等领域。需要代做毕设和论文的同学可以加我微信:LGY78888,当然有任何毕设问题也可以找我免费咨询。 🙉 🙉
博主最近几年一直在从事毕设代做、论文代写业务,对于毕设有很多的个人体会和经验。首先关于做毕设系统一下几点非常重要。
- 1、🙏💕毕设选题(题目是毕设的整个主题,选题没选好所有努力都白费)
- 2、🙏💕技术选型(技术选型是考验你所学技术功底的关键,如果所选技术把控不了,做项目过程中遇到问题很容易被卡住,且技术学习成本高、时间长。)
- 3、🙏💕难度把控 (难度把控是涉及到毕设选题和技术选型,需要有很强的技术功底和经验,不然选择的题目难度高、所涉及的技术实现困难,整个毕设肯定是写不出来的。)
🌻🍍手把手教你开发基于Java SpringBoot的二手商城毕设系统 - 注册功能实现
🌻🍍手把手教你开发基于Java SpringBoot的二手商城毕设系统 - 验证码功能实现
🌻🍍基于毕业设计的图书馆管理系统源代码
🌻🍍微信小程序校园闲置二手物品交易商城系统
🌻🍍微信小程序点餐系统设计与实现
🌻🍍二手商城微信小程序系统后台使用PHP语言实现
🌻🍍Python爬虫抓取基金数据分析、预测系统设计与实现
🌻🍍基于web的毕设选题系统设计与实现
🌻🍍基于微信小程序云开发的校园BBS交流论坛小程序系统(我的毕设项目)
🌻🍍基于微信小程序开发的社区论坛小程序系统_优秀毕业设计作品系统
🌻🍍基于web的校园疫情防控管理毕业设计系统源码
🌻🍍基于微信小程序的学校监考安排管理系统源码
🌻🍍基于协调过滤算法实现的毕设微信小程序系统(学习必看)
感兴趣的可以点击查看,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人。
😄😄好了今天关于这个话题就分享到这里。如果有需要代做毕设系统、代写论文、开题报告等服务的同学欢迎加微信(LGY178888)咨询,请备注来意!!
版权声明:本文为博主原创文章,如果转载请给出原文链接:http://doofuu.com/article/4156299.html
共有 0 条评论 - 手把手教你开发基于Java SpringBoot的二手商城毕设系统 - 登录功能实现