【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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • context和getApplicationContext()介绍

    在android中常常会遇到与context有关的内容浅论一下context : 在语句 AlertDialog.Builder builder = new AlertDialog.Builder(this); 中,要求传递的 参数就是一个context,在这里我们传入的是this,那么这个this究竟指的是什么呢? 这里的this指的是Activity.this,是这个语句所在的Acti

    2022年3月9日
    63
  • java bean有什么好处,使用Java Bean有什么好处?

    java bean有什么好处,使用Java Bean有什么好处?IbelieveIunderstandwhatJavaBeansare:Javaclass(es)whichcontainano-argconstructor,areserializable,andexposetheirfieldswithgettersandsetters.DoesaJavaBeanhavetoexposeallof…

    2022年7月7日
    19
  • uni-app中使用flyio请求_uniapp能否上架

    uni-app中使用flyio请求_uniapp能否上架前言:因为最近需要使用uni-app进行小程序的开发,所以最近在搭建小程序的环境,作为一个使用vue的前端小白,自然选择了支持vue的uni-app。但是uni自带的uni.request需要自己封装(因为懒)所以选择了flyio进行请求封装。环境配置:npminstallflyio在这里我使用npm进行安装,也可以下载源文件wx,js或者wx.umd.min.js1.先看一下np…

    2025年10月4日
    2
  • 利用公网Msf+MS17010跨网段攻击内网(不详细立马关站)「建议收藏」

    利用公网Msf+MS17010跨网段攻击内网(不详细立马关站)「建议收藏」前言其实很多小白在对利用msf进行ms17010攻击的时候总是不成功,其实这都是因为网上大部分的文章都是写的内网对内网(192.168.1.2–>192.168.1.3)这样的案例,今天写了一下利用公网的MSF直接攻击其他服务器内网的案例。准备工作1.安装了Msf的公网主机+Ubuntu系统2.一台其他服务器内网存在445漏洞3.细心,细心,细心,钻研,钻研!!!…

    2022年5月31日
    133
  • CSS实现实心三角形和空心三角形[通俗易懂]

    CSS实现实心三角形和空心三角形[通俗易懂]一次开发中遇到,记录代码原理:1.给一个div,宽和高都为0的时候,盒子什么都没有看起来。为空白2.给一个宽高为0的盒子给一遍像素给100px的上边,下边和右边,border-top:90pxsolidred;border-right:100pxsolidblack;border-bottom:100pxsolidblue;这样左边没有,就会缩成一

    2022年6月29日
    29
  • Android自动填充短信验证码[通俗易懂]

    Android自动填充短信验证码[通俗易懂]前言短信验证码获取并自动填写现在已经成为一个人性化App的标配了,这篇文章将实现一个短信验证码获取并自动填写的demo。其实就是读取指定号码的短信并提取出验证码,然后赋值给EditText显示。demo效果图:读取短信Android系统在接受到一条短信的时候会发出一条Action为android.provider.Telephony.SMS_RECEIVED的有序广播,因此我们读取短信的…

    2022年7月25日
    24

发表回复

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

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