不使用springsecurity如何实现springboot+vue登录验证成功,并保持用户登录状态
时间: 2023-05-14 10:04:30 浏览: 93
可以使用JWT(JSON Web Token)来实现登录验证和用户状态的保持。具体实现步骤如下:
1. 用户输入用户名和密码,前端将其发送到后端。
2. 后端验证用户名和密码是否正确,如果正确,生成一个JWT并返回给前端。
3. 前端将JWT保存在本地(比如localStorage)。
4. 前端每次向后端发送请求时,都将JWT作为请求头的Authorization字段发送给后端。
5. 后端验证JWT的有效性,如果有效,则说明用户已登录,可以继续处理请求。
下面是一个简单的示例代码:
后端:
```java
@RestController
public class LoginController {
@PostMapping("/login")
public String login(@RequestBody User user) {
// 验证用户名和密码是否正确
if (user.getUsername().equals("admin") && user.getPassword().equals("123456")) {
// 生成JWT
String token = Jwts.builder()
.setSubject(user.getUsername())
.setExpiration(new Date(System.currentTimeMillis() + 60 * 60 * 1000)) // 设置过期时间为1小时
.signWith(SignatureAlgorithm.HS512, "secret") // 使用HS512算法和密钥secret进行签名
.compact();
return token;
} else {
throw new RuntimeException("用户名或密码错误");
}
}
}
@RestController
public class UserController {
@GetMapping("/user")
public String getUser(@RequestHeader("Authorization") String token) {
// 验证JWT的有效性
try {
Jwts.parser().setSigningKey("secret").parseClaimsJws(token);
return "admin";
} catch (Exception e) {
throw new RuntimeException("无效的token");
}
}
}
```
前端:
```javascript
// 登录
axios.post('/login', {
username: 'admin',
password: '123456'
}).then(response => {
// 保存JWT
localStorage.setItem('token', response.data);
});
// 发送请求
axios.get('/user', {
headers: {
Authorization: localStorage.getItem('token')
}
}).then(response => {
console.log(response.data);
});
```
注意:这只是一个简单的示例,实际应用中需要考虑更多的安全性问题,比如JWT的过期时间、密钥的管理等。