在springBoot中使用JWT实现1.生成token,2.接收前端token进行身份认证,3.通过token获取对象信息

这篇具有很好参考价值的文章主要介绍了在springBoot中使用JWT实现1.生成token,2.接收前端token进行身份认证,3.通过token获取对象信息。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.使用JWT生成token

第一步:引入依赖

 <!-- JWT -->
        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>3.10.3</version>
        </dependency>

第二步:创建工具类

在until包下创建TokenUntil类,用于生成token

利用id,和password作为参数生成token

JWt为这个包下的对象

import com.auth0.jwt.JWT;
package com.example.mybatis_plus_generator.untils;


import cn.hutool.core.date.DateUtil;
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import org.springframework.stereotype.Component;

import java.util.Date;


/**
 * @author shkstart
 * @create 2023-08-06-13:51
 */
@Component
public class TokenUtils {

    //获取token的静态方法
    public static String getToken(String userId,String password){


        return JWT.create().withAudience(userId)// 将 user id 保存到 token 里面,作为载荷
                .withExpiresAt(DateUtil.offsetHour(new Date(), 2))// 2小时后token过期
                .sign(Algorithm.HMAC256(password));// 以 password 作为 token 的密钥


    }
}

第三步:token使用

在向前端返回的数据对象中添加token属性

springboot获取token的用户信息,spring boot,java,安全

 是serve层中调用工具类方法将生成的token放到返回的数据中

注意:这里获取到的id是integer类型,需要用toString进行类型转换

springboot获取token的用户信息,spring boot,java,安全

 第四步:测试接口

springboot获取token的用户信息,spring boot,java,安全

 


2.通过验证token的拦截器

思路:建立一个统一的拦截器配置类,自己定义一个验证token的配置类。把它放到拦截器类中

知识储备:

关于WebMvcConfigurationSupport类

是Spring MVC提供的一个配置类,用于扩展和自定义Spring MVC的行为。通过继承该类并重写相应的方法,我们可以实现定制化的配置,包括添加拦截器、配置视图解析器、自定义消息转换器等

关于HandlerInterceptor接口

用于拦截请求并对请求进行预处理和后处理。它允许开发人员在请求到达处理器方法之前和之后执行一些自定义的逻辑操作。

HandlerInterceptor接口定义了三个方法:

  1. preHandle:在处理器方法执行之前被调用。可以在该方法中进行一些预处理操作,如身份验证、权限检查、日志记录等。如果返回true,则继续执行后续的拦截器和处理器方法;如果返回false,则请求被拦截,后续的拦截器和处理器方法将不会被执行。

  2. postHandle:在处理器方法执行之后、视图渲染之前被调用。可以在该方法中对响应进行一些后处理操作,如修改视图数据、添加公共模型属性等。

  3. afterCompletion:在整个请求完成之后被调用,即视图渲染完成后。可以在该方法中处理一些释放资源的操作或执行一些日志记录等。

    我们可以创建自定义的HandlerInterceptor实现类来实现上述方法,并将其注册到Spring MVC的配置中,以便拦截和处理请求。在Spring MVC的配置中,可以通过实现WebMvcConfigurer接口的addInterceptors方法来注册自定义的HandlerInterceptor。

    通过使用HandlerInterceptor,我们可以实现一些与请求和响应相关的公共逻辑和功能,如身份验证、日志记录、参数解析、跨域处理等。拦截器提供了一种灵活的方式来对请求进行拦截和处理,帮助开发人员实现系统层面的功能和逻辑。

第一步:创建统一的拦截器类

在config报下建立InterceptorConfig类

该类需要加上@Configuration注解并基础WebMvcConfigurationSupport类

@Configuration
public class InterceptorConfig extends WebMvcConfigurationSupport {



}

第二步:建立验证token的类

在config.interceptor包写建立JwtInterceptor类用于验证token,继承接口HandlerInterceptor表示为拦截器类

重写preHandler,设置规则

package com.example.mybatis_plus_generator.config.interceptor;


import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.example.mybatis_plus_generator.common.Constants;
import com.example.mybatis_plus_generator.entity.User;
import com.example.mybatis_plus_generator.exception.LoginException;
import com.example.mybatis_plus_generator.service.IUserService;
import org.apache.ibatis.logging.LogException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author shkstart
 * @create 2023-08-06-14:38
 */
//注入spring容器中,方便被调用
@Component
public class JwtInterceptor implements HandlerInterceptor {

    //注入service用于验证对象
    @Autowired
    private IUserService userService;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        //在请求头中获取token
        String token = request.getHeader("token");

        //若为空则抛出异常
        if(token == null){
            throw new  LoginException(Constants.CODE_401,"token为空");
        }

        //获取token中的id
        String userId;
        try {
            userId = JWT.decode(token).getAudience().get(0);
        }catch (Exception e){
            throw new LoginException(Constants.CODE_500,"该token不正确");
        }

        //判断该id的用户是否存在
        User user = userService.getById(userId);
        if(user == null){
            throw new LoginException(Constants.CODE_500,"该用户已经不存在");
        }
        //核心:进行验证
        JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(user.getPassword())).build();
        try {
            jwtVerifier.verify(token);
        }catch (Exception e){
            throw new LoginException(Constants.CODE_500,"验证token时出错");
        }

        //没问题返回true
        return true;
    }

}

第三步:引入统一的拦截器类

@Configuration
public class InterceptorConfig extends WebMvcConfigurationSupport {


    @Autowired
    JwtInterceptor jwtInterceptor;

    //增加拦截的规则
    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(jwtInterceptor)//将自己写好的拦截类放进来
                .addPathPatterns("/**")//拦截所有
                .excludePathPatterns("/user/login", "/user/register");//这两个放行

    }

}

第四步:测试

有token时查出

springboot获取token的用户信息,spring boot,java,安全

 token值不正确时

springboot获取token的用户信息,spring boot,java,安全

 3.通过token获取该用户的信息

把这个功能放到包装类中

思路:在until包下的TokenUntil写创建静态getCurrentUser方法,用于方便获取user信息文章来源地址https://www.toymoban.com/news/detail-763316.html

@Component
public class TokenUtils {

    private static IUserService staticUserService;

    @Resource
    private IUserService userService;

    @PostConstruct
    public void setUserService() {
        staticUserService = userService;
    }



    /**
     * 获取当前登录的用户信息
     *
     * @return user对象
     */
    public static User getCurrentUser() {
        try {
            HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
            String token = request.getHeader("token");
            if (StrUtil.isNotBlank(token)) {
                String userId = JWT.decode(token).getAudience().get(0);
                return staticUserService.getById(Integer.valueOf(userId));
            }
        } catch (Exception e) {
            return null;
        }
        return null;
    }
}

到了这里,关于在springBoot中使用JWT实现1.生成token,2.接收前端token进行身份认证,3.通过token获取对象信息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot集成JWT token实现权限验证

    先在pom中引入 JWT依赖 然后引入一个生成的 token 的工具类         然后具体实现上有两种方式,一个是使用自定义注解配合拦截器,另外一个是使用拦截器。 方法一:         先自定义个注解,然后再定义一个自定义拦截器 JwtInterceptor 类,同时让 JwtInterceptor 类继承

    2024年02月10日
    浏览(58)
  • 【JWT】SpringBoot+微信小程序根据指定参数生成Token、更新Token、判断Token是否已经过期、封装wx.request请求更新Token并判断Token是否过期

    微信小程序js代码 微信小程序点击登录按钮调用该方法 java后端代码 getUserCode方法为获取用户的唯一标识openId userLogin方法用于用户授权登录并获取Token userLogin实现类方法 封装了wx的request请求,每次发起请求的时候都走一遍更新Token的接口/user/updateTokenTime,如果接口返回offlin

    2024年02月04日
    浏览(53)
  • SpringBoot(九)jwt + 拦截器实现token验证

        前面两篇文章的过滤器和拦截器,我们都提到过可以做诸如权限验证的事情。http/https是无状态的协议,当用户访问一个后端接口时,如何判断该用户有没有权限?当然,可以使用账号+密码去验证。但是,如果使用账号和密码,需要频繁访问数据库,很明显,会带来一些

    2024年02月04日
    浏览(81)
  • Springboot实现websocket(连接前jwt验证token)

    用户连接服务器weksocket前,需经过jwt的token验证(token中包含账号信息),验证合法后,才可以于服务器正常交互。 一、配置依赖(pom.xml) 二、因为springboot的websocket连接时不会显示header信息,也就无法拿到cookie中的token信息,需要在连接前处理,新建一个WebSocketConfig.class,在

    2024年02月03日
    浏览(83)
  • Java实现JSON Web Token(JWT)的生成、解码和验证

    JSON Web Token(JWT)是一种用于安全传输信息的开放标准。它可以用于认证和授权用户,以及在不同系统之间传输数据。在本文中,我们将介绍如何在 Java 中使用 jjwt 库来生成、解码和验证 JWT 引入 jjwt 库 首先,你需要在你的项目中引入 jjwt 库。如果你使用 Maven,可以在 pom.xm

    2024年02月10日
    浏览(64)
  • springBoot JWT实现websocket的token登录拦截认证

    功能:所有关于websocket的请求必须登录,实现websocket需要登录后才可使用,不登录不能建立连接。 后台spring security配置添加websocket的请求可以匿名访问,关于websocket的请求不要认证就可以随意访问,去除匿名访问后,前端在与websocket建立链接无法在请求头里直接加入Authoriz

    2024年02月13日
    浏览(49)
  • SpringBoot整合Mybatis-Plus、Jwt实现登录token设置

    Spring Boot整合Mybatis-plus实现登录常常需要使用JWT来生成用户的token并设置用户权限的拦截器。本文将为您介绍JWT的核心讲解、示例代码和使用规范,以及如何实现token的生成和拦截器的使用。 一、JWT的核心讲解 JWT(JSON Web Token)是一种基于JSON的,用于在网络上安全传输信息的

    2024年02月02日
    浏览(69)
  • 快速教你如何使用postman工具进行接口测试?(配置全局token、JWT可用)

    现在很多人都在使用前后端分离进行项目开发,那在后端开发过程中使用postman测试工具可快速便捷完成接口测试。但是在测试过程中,很多人发现因为JWT的鉴权,导致半个小时就需要更新一下token,让我们的测试变得复杂。 若是将token作为全局变量,每次都能够自动获取tok

    2024年02月15日
    浏览(49)
  • Jwt(Json web token)——使用token的权限验证方法 & 用户+角色+权限表设计 & SpringBoot项目应用

    1.认证鉴权服务,注册中心,认证中心,鉴权中心; 2.用户,角色,权限表设计,数据库视图的使用; 3.项目中的应用,使用自定义注解+拦截器; 4.枚举类型的json化, @JsonFormat(shape = JsonFormat.Shape.OBJECT) @Getter https://gitee.com/pet365/springboot-privs-token 用户和权限之间关系(多对多

    2024年02月14日
    浏览(75)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包