本文主要是介绍Springboot中JWT登录校验及其拦截器实现方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《Springboot中JWT登录校验及其拦截器实现方法》:本文主要介绍Springboot中JWT登录校验及其拦截器实现方法的相关资料,包括引入Maven坐标、获取Token、JWT拦截器的实现...
前言
这篇我们主要实现后端对用户登录的身份校验,是web项目核心功能之一。
后续会有springboot整合各个功能的文章,同时也会有前端的相关知识,希望能给web开发学习者提供帮助~
一、JWT是什么?
JWT(jsON Web Token)是一种基于 JSON 的轻量级开放标准(RFC 7519),用于在网络应用间安全地传递声明信息。它通过数字签名确保信息的完整性和真实性,常被用于身份验证和数据交换场景。
二、实现步骤
1.引入Maven坐标
在pom.XML中引入Maven坐标:
<dependency>
<groupId>com.auth0</groupId>
<artifactId>Java-jwt</artifactId>
<version>3.10.3</version>
</dependency>2.获取Token
封装一个静态函数用来生成token。在service层用户登录信息匹配成功后,可以调用该函数,来获取Token,同时把Token密钥返回给前端。
public static String getToken(String userId, String password){
long EXPIRE_TIME = 60 * 60 * 1000; //过期时间 60 分钟
Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME);
String token = JW编程T.create().withAudience(userId) // 将 userId 保存到 token 里面
.withExpiresAt(date) //60分钟后token过期
.sign(Algorithm.HMAC256(password)); //使用用户id和password进行token生成
return token; //返回加密后的token密钥
}3.JWT拦截器的实现
public class JwtInterceptor implements HandlerInterceptor {
@Autowired
private UserService userService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
//通过预检请求
if(request.getMethod().equals("OPTION")){
return true;
}
//从请求头中获取Token,xxx为前端请求头中value为Token密yopvbtqJ钥的key
String token = request.getHeader("xxx");
// 如果不是映射到方法直接通过
if(!(handler instanceof HandlerMethod)){
return true;
}
www.chinasem.cn //ServiceException是自定义的异常
if(token == null){
throhttp://www.chinasem.cnw new ServiceException(Constants.CODE_401,"请登录");
}
String userId;
try {
//对Token密钥进行解密,获取用户id
userId = JWT.decode(token).getAudience().get(0);
} catch (JWTDecodeException j) {
//Token密钥有误,无法解密
throw new ServiceException(Constants.CODE_401,"请登录");
}
//通过解密后获取的用户id进行数据库查询,判断是否有该id的用户
User user = userService.getUser(userId);
if (user == null) {
//没有该用户
throw new ServiceException(Constants.CODE_401,"请登录");
}
编程 //获取从数据库查询出来的用户密码,对前端带过来的Token密钥进行进一步验证
JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(user.getPassword())).build();
try {
jwtVerifier.verify(token);
} catch (JWTVerificationException e) {
//Token密钥有误
throw new ServiceException(Constants.CODE_401,"请登录");
}
return true;
}
}
4.JWT拦截器配置
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//"/user/login","/xxx","/yyy/**" 为JWT拦截器不拦截,直接放行的接口
registry.addInterceptor(jwtInterceptor())
.addPathPatterns("/**").excludePathPatterns("/user/login","/xxx","/yyy/**");
}
@Bean
public JwtInterceptor jwtInterceptor(){
return new JwtInterceptor();
}
}
总结
以上实现了后端对用户登录的身份校验,希望对未来的高级工程师们起到帮助,谢谢啦~
到此这篇关于Springboot中JWT登录校验及其拦截器实现的文章就介绍到这了,更多相关Springboot JWT登录校验及拦截器内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!
这篇关于Springboot中JWT登录校验及其拦截器实现方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!