spring cloud分布式项目 结合vue2 实现双token 单点登陆 详细代码实现
在Spring Cloud分布式项目中结合Vue2实现双Token的单点登录,主要涉及后端的Spring Security和OAuth2以及前端的Vue组件设计。以下是实现的大致步骤和代码示例:
后端(Spring Cloud和Spring Security):
- 使用Spring Security实现登录接口,验证用户凭据。
- 成功登录后,生成访问Token(Access Token)。
- 生成Refersh Token,并存储在客户端的Cookie中。
- 提供接口用于使用Refersh Token刷新Access Token。
@RestController
@RequestMapping("/api/auth")
public class AuthController {
@PostMapping("/login")
public ResponseEntity<?> login(@RequestBody LoginRequest loginRequest) {
// 登录逻辑...
// 成功后生成tokens
String accessToken = tokenService.generateAccessToken(authUser);
String refreshToken = tokenService.generateRefreshToken(authUser);
Cookie cookie = new Cookie("refreshToken", refreshToken);
cookie.setMaxAge(7 * 24 * 60 * 60); // 设置Cookie有效期为7天
response.addCookie(cookie);
return ResponseEntity.ok(new AuthResponse(accessToken, refreshToken));
}
@PostMapping("/refreshtoken")
public ResponseEntity<?> refreshToken(HttpServletRequest request) {
// 从Cookie中获取Refresh Token
String refreshToken = ""; // 获取逻辑
// 验证Refresh Token
// 生成新的Access Token
String accessToken = tokenService.refreshToken(refreshToken);
return ResponseEntity.ok(new AuthResponse(accessToken, null));
}
}
前端(Vue2):
- 创建Vue组件用于登录。
- 登录成功后,将Access Token和Refersh Token存储在本地存储(localStorage或sessionStorage)。
- 创建Vue拦截器用于在发送请求时附加Access Token。
- 创建刷新Token逻辑,在Access Token过期时使用Refersh Token获取新的Access Token。
// Vue登录方法
methods: {
login() {
this.$http.post('/api/auth/login', this.credentials)
.then(response => {
localStorage.setItem('accessToken', response.data.accessToken);
localStorage.setItem('refreshToken', response.data.refreshToken);
// 登录后的操作...
})
.catch(error => {
// 错误处理...
});
}
}
// Vue拦截器
Vue.http.interceptors.push(function(request, next) {
// 从本地存储
评论已关闭