jwt跨域认证
文章目录
- jwt跨域认证
- 简介
- 使用
- 加入依赖
- 生成token
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";// 生成tokenpublic 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();}// 解析tokenpublic 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 {@Autowiredprivate 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
可以返回