sptingboot项目举例 登录功能 使用token访问受保护接口
时间: 2023-12-03 08:02:29 浏览: 96
好的,以下是一个使用Spring Boot实现登录功能和使用JWT token访问受保护接口的示例:
首先,您需要在项目中添加以下依赖项:
```
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.0</version>
</dependency>
```
然后,您可以创建一个UserController类来处理用户登录和生成token:
```java
@RestController
@RequestMapping("/api")
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/login")
public ResponseEntity<String> login(@RequestBody User user) {
String token = null;
HttpStatus status = null;
try {
User loginUser = userService.login(user.getUsername(), user.getPassword());
if (loginUser != null) {
token = Jwts.builder().setSubject(loginUser.getUsername())
.setExpiration(new Date(System.currentTimeMillis() + 864000000))
.signWith(SignatureAlgorithm.HS512, "yourSecretKey").compact();
status = HttpStatus.OK;
} else {
status = HttpStatus.UNAUTHORIZED;
}
} catch (Exception e) {
status = HttpStatus.INTERNAL_SERVER_ERROR;
}
return new ResponseEntity<>(token, status);
}
}
```
在上面的代码中,我们首先注入了一个UserService对象。然后,我们在login()方法中处理用户登录并生成JWT token。在这个示例中,我们使用HS512算法和一个密钥来签名JWT。您应该将这个密钥放在配置文件中,并使用一个安全的方式来保护它。
接下来,您可以创建一个受保护的UserController类来处理需要身份验证的请求:
```java
@RestController
@RequestMapping("/api")
public class ProtectedController {
@GetMapping("/protected")
public ResponseEntity<String> protectedEndpoint(@RequestHeader("Authorization") String token) {
String username = getUsernameFromToken(token);
if (username != null) {
return new ResponseEntity<>("Hello, " + username + "!", HttpStatus.OK);
} else {
return new ResponseEntity<>("Unauthorized", HttpStatus.UNAUTHORIZED);
}
}
private String getUsernameFromToken(String token) {
try {
Claims claims = Jwts.parser().setSigningKey("yourSecretKey").parseClaimsJws(token).getBody();
return claims.getSubject();
} catch (Exception e) {
return null;
}
}
}
```
在上面的代码中,我们首先获取Authorization标头中的JWT token,并使用getUsernameFromToken()方法从token中提取用户名。如果token有效,则返回一个带有用户名的响应。否则,返回一个HTTP 401未经授权的响应。
这就是一个简单的使用Spring Boot实现登录功能和使用JWT token访问受保护接口的示例。当然,这只是一个基础示例,您可以根据自己的需求进行更改和扩展。
阅读全文