利用注解装配实现登录注册功能
时间: 2023-08-12 08:08:52 浏览: 29
首先,需要在登录和注册的 Controller 类上加上 `@Controller` 注解和对应的请求路径的 `@RequestMapping` 注解。
接着,在需要注入的服务类上加上 `@Service` 注解。
在需要注入的 DAO 类上加上 `@Repository` 注解。
在需要注入的实体类上加上 `@Entity` 和 `@Table` 注解。
在需要将密码加密的工具类上加上 `@Component` 注解。
在需要将密码解密的工具类上加上 `@Component` 注解。
在需要对密码进行校验的工具类上加上 `@Component` 注解。
最后,在需要进行注入的属性上加上 `@Autowired` 注解即可完成注入操作。
具体实现可以参考以下代码示例:
User实体类:
```java
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
// 省略 getter 和 setter 方法
}
```
UserDAO接口:
```java
@Repository
public interface UserDAO extends JpaRepository<User, Long> {
User findByUsername(String username);
}
```
UserServiceImpl类:
```java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDAO userDAO;
@Override
public User findByUsername(String username) {
return userDAO.findByUsername(username);
}
@Override
public void save(User user) {
userDAO.save(user);
}
}
```
PasswordEncoderUtil类:
```java
@Component
public class PasswordEncoderUtil {
private static final BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
public static String encode(String password) {
return encoder.encode(password);
}
}
```
PasswordDecoderUtil类:
```java
@Component
public class PasswordDecoderUtil {
private static final BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
public static boolean match(String password, String encodedPassword) {
return encoder.matches(password, encodedPassword);
}
}
```
PasswordValidatorUtil类:
```java
@Component
public class PasswordValidatorUtil {
public static boolean validate(String password) {
// 校验逻辑
}
}
```
LoginController类:
```java
@Controller
@RequestMapping("/login")
public class LoginController {
@Autowired
private UserService userService;
@PostMapping("/doLogin")
public String doLogin(String username, String password) {
User user = userService.findByUsername(username);
if (user != null && PasswordDecoderUtil.match(password, user.getPassword())) {
// 登录成功,跳转到首页
return "redirect:/index";
} else {
// 登录失败,跳转到登录页并提示错误信息
return "redirect:/login?error=true";
}
}
}
```
RegisterController类:
```java
@Controller
@RequestMapping("/register")
public class RegisterController {
@Autowired
private UserService userService;
@PostMapping("/doRegister")
public String doRegister(String username, String password) {
if (!PasswordValidatorUtil.validate(password)) {
// 注册失败,密码不符合规则,跳转到注册页并提示错误信息
return "redirect:/register?error=true";
}
User user = new User();
user.setUsername(username);
user.setPassword(PasswordEncoderUtil.encode(password));
userService.save(user);
// 注册成功,跳转到登录页
return "redirect:/login";
}
}
```