Jwt登录认证(拦截器):
使用拦截器统一验证令牌
登录和注册接口需要放行
interceptors.LoginInterceptor:(注册一个拦截器)
package com.lin.springboot01.interceptors;import com.lin.springboot01.pojo.Result;
import com.lin.springboot01.utils.JwtUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;import java.util.Map;@Component
public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String token = request.getHeader("Authorization");try {//能否解析成功Map<String, Object> claims = JwtUtil.parseToken(token);//放行return true;} catch (Exception e) {//解析失败,httpServletResponse响应码设置为401response.setStatus(401);return false;}}
}
config.WebConfig:(在config配置项中配置拦截器)
package com.lin.springboot01.config;import com.lin.springboot01.interceptors.LoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate LoginInterceptor loginInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {//登录接口和注册接口不拦截registry.addInterceptor(loginInterceptor).excludePathPatterns("/user/login","/user/register");}
}
controller.ArticleController
package com.lin.springboot01.controller;import com.lin.springboot01.pojo.Result;
import com.lin.springboot01.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("/article")
public class ArticleController {@GetMapping("/list")public Result<String> list(/*@RequestHeader(name = "Authorization") String token, HttpServletResponse response*/){//验证token/* try {Map<String, Object> claims = JwtUtil.parseToken(token); //parseToken是JwtUtil工具类里定义的解析token的方法return Result.success("可以展示数据");} catch (Exception e) {response.setStatus(401);return Result.error("未登录");}*/return Result.success("可以展示数据");}}