用springboot写一个登录注册功能
时间: 2024-05-07 21:17:21 浏览: 22
好的,这是一个常见的功能,主要分为以下几步:
1.设置数据库表,包括用户的信息、登录日志等
2.实现注册功能,需要处理用户名重复、密码加密等
3.实现登录功能,需要判断用户名、密码是否匹配,同时记录登录日志
下面是使用Spring Boot框架实现登录注册功能的示例代码:
1.创建用户实体类User:
```
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name = "username", unique = true)
private String username;
@Column(name = "password")
private String password;
// getters and setters
}
```
2.创建登录日志实体类LoginLog:
```
@Entity
@Table(name = "login_log")
public class LoginLog {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name = "username")
private String username;
@Column(name = "login_time")
private Date loginTime;
// getters and setters
}
```
3.创建用户仓库类UserRepository:
```
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
User findByUsername(String username);
}
```
4.创建登录日志仓库类LoginLogRepository:
```
@Repository
public interface LoginLogRepository extends JpaRepository<LoginLog, Long> {
}
```
5.创建用户服务类UserService:
```
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public void register(User user) {
// 判断用户名是否重复,如果重复则抛出异常
if(userRepository.findByUsername(user.getUsername()) != null) {
throw new RuntimeException("Username already exists!");
}
// 密码加密
user.setPassword(BCrypt.hashpw(user.getPassword(), BCrypt.gensalt()));
// 保存用户信息
userRepository.save(user);
}
public User login(String username, String password) {
// 根据用户名获取用户信息
User user = userRepository.findByUsername(username);
// 判断用户是否存在
if(user == null) {
throw new RuntimeException("User not found!");
}
// 判断密码是否正确
if(!BCrypt.checkpw(password, user.getPassword())) {
throw new RuntimeException("Incorrect password!");
}
return user;
}
}
```
6.创建登录拦截器类LoginInterceptor:
```
@Component
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 判断用户是否已登录
if(request.getSession().getAttribute("user") == null) {
// 未登录,则重定向到登录页面
response.sendRedirect("/login");
return false;
}
return true;
}
}
```
7.配置登录拦截器:
```
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Autowired
private LoginInterceptor loginInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns("/login", "/register");
}
}
```
8.创建登录控制器类LoginController:
```
@Controller
public class LoginController {
@Autowired
private UserService userService;
@GetMapping("/login")
public String loginPage() {
return "login";
}
@PostMapping("/login")
public String login(@RequestParam String username, @RequestParam String password, HttpSession session) {
// 调用UserService中的login方法进行登录
User user = userService.login(username, password);
// 将用户信息存入Session中
session.setAttribute("user", user);
// 重定向到首页
return "redirect:/";
}
}
```
9.创建注册控制器类RegisterController:
```
@Controller
public class RegisterController {
@Autowired
private UserService userService;
@GetMapping("/register")
public String registerPage() {
return "register";
}
@PostMapping("/register")
public String register(User user) {
// 调用UserService中的register方法进行注册
userService.register(user);
// 重定向到登录页面
return "redirect:/login";
}
}
```
通过以上步骤,就可以实现一个基本的登录注册功能了。