【SpringBoot】45、SpringBoot中整合JWT实现Token验证(注解篇)「建议收藏」

前言上篇文章,我们已经在SpringBoot中整合了JWT并实现了Token验证,那我们在实际应用中就会发现,如果每个视图层(controller)都手动验证token,代码就会显得特别臃肿,本篇文章主要为了解决该问题。如果对整合JWT还不熟悉的朋友,可以先看看我的这篇博客:【SpringBoot】四十四、SpringBoot中整合JWT实现Token验证自定义注解1、创建自定义注解packagecom.asurplus.common.annotation;import

大家好,又见面了,我是你们的朋友全栈君。

前言

上篇文章,我们已经在 SpringBoot 中整合了 JWT 并实现了 Token 验证,那我们在实际应用中就会发现,如果每个 视图层(controller)都手动验证 token,代码就会显得特别臃肿,本篇文章主要为了解决该问题。

如果对整合 JWT 还不熟悉的朋友,可以先看看我的这篇博客:【SpringBoot】四十四、SpringBoot中整合JWT实现Token验证(整合篇)

自定义注解

1、创建自定义注解

package com.asurplus.common.annotation;

import java.lang.annotation.*;

/**
 * 自定义注解 验证 token
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface JwtToken {

}

我们创建了一个名为 JwtToken 的注解,它没有任何参数,解释一下注解上面的一些注解:

  • @Target(ElementType.METHOD),Target 说明了 Annotation 所修饰的对象范围,METHOD 用于描述方法
  • @Retention(RetentionPolicy.RUNTIME),运行时注解,注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在
  • @Documented,元注解,表明这个注解应该被 javadoc 工具记录

2、拦截器

package com.asurplus.common.config;

import com.asurplus.common.jwt.JwtUtil;
import com.asurplus.common.utils.ResponseResult;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

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

@Component
public class JwtTokenInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        JwtToken annotation;
        if (handler instanceof HandlerMethod) {
            annotation = ((HandlerMethod) handler).getMethodAnnotation(JwtToken.class);
        } else {
            return true;
        }
        // 如果没有该注解,直接放行
        if (annotation == null) {
            return true;
        }
        // 验证token
        ResponseResult res = JwtUtil.verity();
        if (200 == res.getCode()) {
            return true;
        }
        // 验证不通过,返回401,表示用户未登录
        response.setStatus(401);
        return false;
    }

}

3、注解拦截器

package com.asurplus.common.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Autowired
    private JwtTokenInterceptor authorizationInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(authorizationInterceptor).addPathPatterns("/api/**");
    }
}

我们拦截了所有以 api 开头的请求路径,如果带有 @JwtToken 注解都会验证 token 信息,从而实现自定义注解验证 token

如您在阅读中发现不足,欢迎留言!!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129630.html原文链接:https://javaforall.net

(1)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • phpstudy php5.4以上版本伪静态设置 thinkphp

    phpstudy php5.4以上版本伪静态设置 thinkphp

    2021年10月15日
    59
  • .NET Core 中的 Generic Host快速使用指南

    .NET Core 中的 Generic Host快速使用指南本文以自己在工作中学习和使用.netcoregeneric-host作一个总结。前言在创建的ASPNETCORE项目中,我们可以在Main()中看见,我们通过IWe…

    2022年10月12日
    0
  • Java分布式应用技术架构介绍

    Java分布式应用技术架构介绍分布式架构的演进系统架构演化历程-初始阶段架构初始阶段的小型系统应用程序、数据库、文件等所有的资源都在一台服务器上通俗称为LAMP特征:应用程序、数据库、文件等所有的资源都在一台服务器上。描述:通常服务器操作系统使用linux,应用程序使用PHP开发,然后部署在Apache上,数据库使用Mysql,汇集各种免费开源软件以及一台廉价服务器就可以开始系统

    2022年6月12日
    33
  • vue ajax获取数据的时候,如何保证传递参数的安全或者说如何保护api的安全

    vue ajax获取数据的时候,如何保证传递参数的安全或者说如何保护api的安全

    2021年10月13日
    34
  • JavaSE 编写第一个程序

    JavaSE 编写第一个程序文章目录第一篇语法入门说在前面的话前言内容介绍更新内容其他说明本书由来帮助说明急需求职致谢与勘误自序第3版自序第2版自序第1版自序第0版自序第一章JDK下载及准备工作1.1Java介绍1.1.1Java简介1.1.2Java技术体系1.1.3前后端的工作内容1.1.4Java语言特性1.1.5Java用途1.2JDK下载1.2.1JDK与JRE的区别1.2.2JDK下载与安装1.2.3卸载1.2.4禁止JDK检查更新1.3编写代码前的准备

    2022年7月13日
    17
  • mysql——cmd进入mysql及常用的mysql操作[通俗易懂]

    mysql——cmd进入mysql及常用的mysql操作[通俗易懂]cmd进入mysql操作win+R,输入cmd,打开cmd窗口,进入到mysqlbin目录的路径下第一步:启动mysql服务,可以通过“netstartmyql”命令实现;第二步:先使用DOS命令进入mysql的安装目录下的bin目录中;第三步:在命令行输入:mysql-u用户名-p密码;回车;-h表示服务器名,localhost表示本地,-hlocalhost可不输入;-u为数据库用户名,root是mysql默认用户名;-p为密码,如果设置了密码,可直接在-p后链接输入,如

    2022年6月9日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号