SSM(Spring+Springmvc+MyBatis)+ajax+JWT,实现登录JWT(token)认证获取权限
以下是一个简化的示例,展示了如何在使用SSM框架结合ajax和JWT实现登录时获取token的过程:
- 用户发送登录请求到服务器,服务器验证通过后,生成JWT token。
- 服务器将token作为响应返回给客户端。
- 客户端将token存储起来,例如在localStorage或sessionStorage中。
- 客户端后续的请求都会包含这个token,以证明身份。
后端代码(Spring MVC + JWT):
// 登录接口
@PostMapping("/login")
public ResponseEntity<?> login(@RequestBody LoginRequest loginRequest) {
// 验证用户凭证
User user = userService.authenticate(loginRequest.getUsername(), loginRequest.getPassword());
if (user == null) {
return new ResponseEntity<>("登录失败", HttpStatus.UNAUTHORIZED);
}
// 生成token
String token = Jwts.builder()
.setSubject(user.getUsername())
.setExpiration(new Date(System.currentTimeMillis() + 864000000))
.signWith(SignatureAlgorithm.HS512, "YourSecretKey")
.compact();
// 返回生成的token
return ResponseEntity.ok(new AuthResponse(token));
}
// 其他受保护的接口
@GetMapping("/protected")
public ResponseEntity<?> protectedResource(@RequestHeader("Authorization") String token) {
// 验证token
Claims claims = Jwts.parser()
.setSigningKey("YourSecretKey")
.parseClaimsJws(token.replace("Bearer", ""))
.getBody();
String username = claims.getSubject();
if (username != null) {
// 根据username获取用户权限
List<String> permissions = userService.getUserPermissions(username);
return ResponseEntity.ok(new UserPermissionsResponse(permissions));
}
return new ResponseEntity<>("Token not valid", HttpStatus.UNAUTHORIZED);
}
前端代码(JavaScript + jQuery + ajax):
$(document).ready(function() {
$('#loginForm').submit(function(e) {
e.preventDefault();
var loginData = {
username: $('#username').val(),
password: $('#password').val()
};
$.ajax({
url: '/login',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(loginData),
success: function(response) {
// 登录成功后保存token
localStorage.setItem('token', 'Bearer ' + response.token);
// 跳转到主页或其他页面
window.location.href = '/';
},
error: funct
评论已关闭