springboot实现登录注册的代码
时间: 2023-08-30 16:09:44 浏览: 100
好的,我可以为您提供一个简单的示例代码来实现Spring Boot中的登录注册功能。首先,您需要创建一个名为“User”的实体类,以便存储用户的信息,包括用户名和密码。这里是一个样例代码:
```java
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String username;
private String password;
// getters and setters
}
```
然后,您需要创建一个名为“UserController”的控制器类,以处理用户登录注册的请求。这里是一个样例代码:
```java
@RestController
@RequestMapping("/api")
public class UserController {
@Autowired
private UserService userService;
// 注册用户
@PostMapping("/register")
public void registerUser(@RequestBody User user) {
userService.save(user);
}
// 用户登录
@PostMapping("/login")
public ResponseEntity<?> loginUser(@RequestBody User user) {
String token = userService.login(user.getUsername(), user.getPassword());
if(token != null) {
return ResponseEntity.ok(token);
} else {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
}
}
}
```
在上面的代码中,UserService使用Spring Security来为用户提供登录功能。您需要实现UserService类,并在其中添加一个login()方法来处理用户登录请求。这里是一个示例代码:
```java
@Service
public class UserService {
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private JwtTokenProvider jwtTokenProvider;
@Autowired
private UserRepository userRepository;
public void save(User user) {
userRepository.save(user);
}
public String login(String username, String password) {
try {
authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password));
return jwtTokenProvider.createToken(username, userRepository.findByUsername(username).getRoles());
} catch (AuthenticationException e) {
return null;
}
}
}
```
这里使用了JwtTokenProvider类来创建JSON Web Token(JWT),用于在服务器和客户端之间进行身份验证。该类还需要获取用户的角色信息,从而将其添加到JWT中。您需要创建一个名为“JwtTokenProvider”的类,并实现其方法。这里是一个示例代码:
```java
@Component
public class JwtTokenProvider {
@Value("${jwt.secret}")
private String secretKey;
@Value("${jwt.expiration}")
private long validityInMilliseconds;
@Autowired
private UserDetailsService userDetailsService;
@PostConstruct
protected void init() {
secretKey = Base64.getEncoder().encodeToString(secretKey.getBytes());
}
public String createToken(String username, List<Role> roles) {
Claims claims = Jwts.claims().setSubject(username);
claims.put("auth", roles.stream().map(s -> new SimpleGrantedAuthority(s.getAuthority()))
.filter(Objects::nonNull).collect(Collectors.toList()));
Date now = new Date();
Date validity = new Date(now.getTime() + validityInMilliseconds);
return Jwts.builder().setClaims(claims).setIssuedAt(now).setExpiration(validity)
.signWith(SignatureAlgorithm.HS256, secretKey).compact();
}
public Authentication getAuthentication(String token) {
UserDetails userDetails = this.userDetailsService.loadUserByUsername(getUsername(token));
return new UsernamePasswordAuthenticationToken(userDetails, "", userDetails.getAuthorities());
}
public String getUsername(String token) {
return Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token).getBody().getSubject();
}
}
```
最后,您需要创建一个名为“UserRepository”的JPA仓库类,用于与数据库交互。这里是一个示例代码:
```java
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
User findByUsername(String username);
}
```
希望这个示例代码可以帮助到您完成Spring Boot的登录注册功能。如果您有更多的问题,请告诉我,我会尽力回答。
阅读全文