编写一个jwt实现单点登录的contoller包
时间: 2023-03-03 10:42:30 浏览: 73
以下是一个使用JWT实现单点登录的Controller包的示例。需要注意的是,本示例仅提供基本的思路和示例代码,具体实现可能因应用场景而异。
```java
@RestController
@RequestMapping("/api/auth")
public class AuthController {
@Autowired
private UserService userService;
@Autowired
private JwtTokenUtil jwtTokenUtil;
@PostMapping("/login")
public ResponseEntity<?> login(@RequestBody LoginRequest loginRequest) {
// 通过用户名和密码验证用户身份
User user = userService.authenticate(loginRequest.getUsername(), loginRequest.getPassword());
// 生成JWT令牌
String token = jwtTokenUtil.generateToken(user);
// 返回令牌给客户端
return ResponseEntity.ok(new JwtResponse(token));
}
@GetMapping("/validate")
public ResponseEntity<?> validateToken(@RequestHeader("Authorization") String token) {
// 从请求头中获取令牌
String jwt = token.substring(7);
// 验证令牌是否有效
if (jwtTokenUtil.validateToken(jwt)) {
// 获取令牌中的用户名
String username = jwtTokenUtil.getUsernameFromToken(jwt);
// 获取用户信息并返回给客户端
User user = userService.findByUsername(username);
return ResponseEntity.ok(user);
} else {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
}
}
}
```
上述代码中,我们使用了一个`LoginRequest`对象来封装登录请求中的用户名和密码,其中`UserService`负责验证用户身份,`JwtTokenUtil`负责生成和验证JWT令牌。在`login()`方法中,我们首先验证用户身份,然后使用`JwtTokenUtil`生成JWT令牌,并将其返回给客户端。在`validateToken()`方法中,我们从请求头中获取JWT令牌,然后使用`JwtTokenUtil`验证其是否有效。如果令牌有效,我们从中获取用户名,并使用`UserService`获取用户信息并将其返回给客户端。如果令牌无效,我们返回一个`401 Unauthorized`状态码。