封装一个工具类,专门生成和解析token:
JwtUtil工具类源码如下:
package com.aibaodian.baymaxexpress.controller;
import com.aibaodian.baymaxexpress.pojo.Result;
import com.aibaodian.baymaxexpress.utils.JwtUtil;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
@RequestMapping("/address")
public class AddressController {
@GetMapping("/list")
public Result<String> addAddress(@RequestHeader(name = "Authorization") String token, HttpServletResponse response){
//验证token,取协议头的Authorization,如果验证不报异常,则返回数据,报异常,则返回401,401需要response
try{
Map<String, Object> claims = JwtUtil.parseToken(token);
return Result.success(" 地址列表....");
}catch (Exception e){
response.setStatus(401);
return Result.error("未登录");
}
//检验工作全部放到拦截器里面.
// return Result.success("所有地址列表....");
}
}
然后controller层addAddress方法解析token,方法需要两个形参,第一个形参,取请求头的Authorization这个就是token,第二个形参,response,解析失败则响应401.
如果每次都在接口上解析,这重复了,不优雅,需要一个实现一个拦截器,在拦截器上来处理token.记得要加上@Component注册到ioc容器中.
然后需要实现MVC配置类中的添加拦截器addInterceptors方法,把我们的loginInterceptors注册进去,而且,我们需要考虑到,浏览器访问注册和登录接口时,根本就不需要token的呀,所以还需要设置不拦截的地址.
浏览器访问登录和注册接口时,不验证token