在AngularJS和Spring Boot中获取经过身份验证的用户信息,你可以使用JSON Web Token(JWT)来实现。
首先,你需要在Spring Boot中设置身份验证,并生成JWT。以下是一个示例:
@RestController
@RequestMapping("/api")
public class UserController {
@Autowired
private UserService userService;
@Autowired
private JwtTokenUtil jwtTokenUtil;
@PostMapping("/authenticate")
public ResponseEntity> authenticateUser(@RequestBody UserCredentials credentials) {
// 身份验证逻辑,验证用户名和密码
// 如果验证通过,生成JWT
final UserDetails userDetails = userService.loadUserByUsername(credentials.getUsername());
final String token = jwtTokenUtil.generateToken(userDetails);
return ResponseEntity.ok(new JwtResponse(token));
}
@GetMapping("/user")
public ResponseEntity> getUser(HttpServletRequest request) {
// 从请求头中获取JWT
final String token = request.getHeader("Authorization").substring(7);
// 解析JWT并获取用户信息
final String username = jwtTokenUtil.getUsernameFromToken(token);
final User user = userService.findByUsername(username);
return ResponseEntity.ok(user);
}
}
上述示例中,/api/authenticate
用于用户身份验证,验证成功后会生成JWT,并将其返回给前端。/api/user
用于获取经过身份验证的用户信息,它会解析JWT并获取用户名,然后从数据库中获取用户信息,并将其返回给前端。
在AngularJS中,你可以使用$http
服务来处理身份验证和获取用户信息。以下是一个示例:
app.controller('AuthController', function($scope, $http, $window) {
$scope.authenticate = function() {
var credentials = {
username: $scope.username,
password: $scope.password
};
$http.post('/api/authenticate', credentials)
.then(function(response) {
var token = response.data.token;
$window.localStorage.setItem('token', token);
});
};
$scope.getUser = function() {
var token = $window.localStorage.getItem('token');
$http.get('/api/user', {
headers: { 'Authorization': 'Bearer ' + token }
})
.then(function(response) {
$scope.user = response.data;
});
};
});
在上面的示例中,$scope.authenticate
函数用于向服务器发送身份验证请求,并将返回的JWT保存到浏览器的本地存储中。$scope.getUser
函数从本地存储中获取JWT,并将其作为请求头的一部分发送给服务器以获取用户信息。
你可以根据你的项目需求和实际情况进行适当的修改和调整。