jwt跨域认证
简介
session认证:
Token认证
jwt 实现方案
使用
加入依赖
生成token
代码:
package com.example.demo.util;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class JwtUtil {
// 7天过期
private static Long expire = 604800L; // 注意这里加上了L后缀来表示这是一个长整型
// 32位秘钥
private static String secret = "abcdfghiabcdfghiabcdfghiabcdfghi";
// 生成token
public static String generateToken(String username) {
Date now = new Date();
Date expiration = new Date(now.getTime() + 1000 * expire);
// 注意这里修正了方法名的大小写,应该是setExpiration而不是setExpiration(
return Jwts.builder()
.setHeaderParam("type", "JWT") // 注意这里的"type"值修正为了"JWT"(根据常见的JWT标准)
.setSubject(username)
.setIssuedAt(now)
.setExpiration(expiration) // 这里修正了括号的使用
.signWith(SignatureAlgorithm.HS512, secret)
.compact();
}
// 解析token
public static Claims getClaimsByToken(String token) {
return Jwts.parser()
.setSigningKey(secret) // 假设secret是已经定义的签名密钥
.parseClaimsJws(token)
.getBody();
}
}
package com.example.demo.controller;
import com.example.demo.mapper.pojo.User;
import com.example.demo.mapper.pojo.UserMapper;
import com.example.demo.util.JwtUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@CrossOrigin
public class UserController {
@Autowired
private UserMapper userMapper;
// @Operation(summary = "获取用户信息")
// @GetMapping("/user/{id}")
// public String getUserById(@PathVariable int id) {
// return "根据ID获取用户";
// }
@PostMapping("/login")
public String login(@RequestBody User user){
System.out.println("token生产");
String token = JwtUtil.generateToken(user.getName());
System.out.println(token);
return token;
}
@GetMapping("/user")
public List<User> getUser() {
List<User> users = userMapper.selectList(null);
for(User item: users) {
System.out.println("姓名:"+item.getName());
System.out.println("电话:"+item.getPhone());
}
return users;
}
@PostMapping("/user")
public String save(User user) {
return "添加用户";
}
@PutMapping("/user")
public String update(User user) {
return "更新用户";
}
@DeleteMapping("/user/{id}")
public String deleteById(@PathVariable int id) {
return "根据ID删除用户";
}
}
这里在登录接口,测试能不能返回token
可以返回