SpringBoot的登录校验demo
立即下载
资源介绍:
简介:
SpringBoot的登录校验demo,内含生成和解析JWT令牌并通过拦截器拦截的基本功能
代码讲解:
https://blog.csdn.net/m0_53140426/article/details/140794789
环境:
(1)JDK 11
(2)SpringBoot:2.6.13
(3)Maven:3.6.3
package com.example.interceptor;
import com.example.properties.JwtProperties;
import com.example.util.JwtUtil;
import io.jsonwebtoken.Claims;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
@Slf4j
public class JwtTokenAdminInterceptor implements HandlerInterceptor {
@Autowired
private JwtProperties jwtProperties;
// idea按Ctrl+o重写方法
// preHandle目标资源方法运行前运行;
// postHandle目标资源方法运行后运行;
// afterCompletion视图渲染完毕后执行,最后执行.
/**
* 目标资源方法运行前运行
* 返回true:放行
* 返回false:不放行
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//当前拦截到的不是动态方法,直接放行
if (!(handler instanceof HandlerMethod)) {
return true;
}
//1、从请求头中获取令牌
String token = request.getHeader(jwtProperties.getAdminTokenName());
//2、校验令牌
try {
Claims claims = JwtUtil.parseJWT(jwtProperties.getAdminSecretKey(), token);
log.info("当前admin的id: {}", Long.valueOf(claims.get("id").toString()));
// BaseContext.setCurrentId(empId); //设置该线程当前使用的id
//3、通过,放行
return true;
} catch (Exception e) {
//4、不通过,响应401状态码
response.setStatus(401);
return false;
}
}
}