• 中文
    • English
  • 注册
  • 查看作者
  • java SpringBoot登录验证token拦截器

    用户访问接口验证,如果用户没有登录,则不让他访问除登录外的任何接口。

    实现思路:

    1.前端登录,后端创建token(通过JWT这个依赖),返给前端

    2.前端访问其他接口,传递token,后端判断token存在以或失效

    3.失效或不存在,则返回失效提示,前端根据接口返回的失效提示,让其跳转到登录界面

    目录

    注解的作用说明@Target代表此注解,能@到哪些代码上

    返回值-全局异常类定义

    程序员使用:方法不加注解,

    测试程序员使用:加上,调用通过,

    注解拓展:从请求中获取token

    注解定义

    定义2个注解,1个用于 任何接口都能访问 ,另外一个用于 需要登录才能访问

    调用都通过注解

    package com.example.etf.story.tools; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface PassToken { boolean required() default true; }

    登录才能通过

    注解的作用说明@Target代表此注解,能@到哪些代码上

    @Target :注解的作用目标

    @Target(ElementType.TYPE) ——接口、类、枚举、注解@Target(ElementType.FIELD) ——字段、枚举的常量@Target(ElementType.METHOD) ——方法@Target(ElementType.PARAMETER) ——方法参数@Target(ElementType.CONSTRUCTOR) ——构造函数@Target(ElementType.LOCAL_VARIABLE) ——局部变量@Target(ElementType.ANNOTATION_TYPE) ——注解@Target(ElementType.PACKAGE) ——包

    @Retention :注解的保留位置

    RetentionPolicy.SOURCE :这种类型的 Annotations 只在源代码级别保留,编译时就会被忽略,在 class 字节码文件中不包含。

    RetentionPolicy.CLASS :这种类型的 Annotations 编译时被保留,默认的保留策略,在 class 文件中存在,但 JVM 将会忽略,运行时无法获得。

    @Document :说明该注解将被包含在 javadoc 中

    @Inherited :说明子类可以继承父类中的该注解

    token生成与验证

    传送门

    然后springBoot拦截器验证token

    拦截器定义

    拦截器配置定义

    拦截器拦截,除了登录和发送短信,不拦截,其他都拦截

    拦截的时候,调用的方法,给谁通过

    其中service查询数据库,有没有用户,的方法要自己写

    拦截器的方法执行类

    java SpringBoot登录验证token拦截器

    返回值-全局异常类定义加入全局,异常类,这样当异常,会返回你所指定的异常package com.example.etf.story.tools; import com.alibaba.fastjson.JSONObject; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; @ControllerAdvice public class GloablExceptionHandler { @ResponseBody @ExceptionHandler(Exception.class) public Object handleException(Exception e) { String msg = e.getMessage(); if (msg == null || msg.equals(“”)) { msg = “服务器出错”; } JSONObject jsonObject = new JSONObject(); jsonObject.put(“message”, msg); jsonObject.put(“status”,500) return jsonObject; } }各种测试不传token成功

    java SpringBoot登录验证token拦截器

    制造可行的假token我们测试一下加token后的

    java SpringBoot登录验证token拦截器

    java SpringBoot登录验证token拦截器

    因为数据库里,我没有插入,所以不存在,我们在随便写个token伪造token测试

    java SpringBoot登录验证token拦截器

    我们在试试程序员使用:方法不加注解,测试

    java SpringBoot登录验证token拦截器

    程序员使用:加上,调用通过,注解我们试试,加上通过注解

    java SpringBoot登录验证token拦截器

    java SpringBoot登录验证token拦截器

    拓展:从请求中获取token我们在试试从中获取token

    java SpringBoot登录验证token拦截器

    java SpringBoot登录验证token拦截器

    结束。

  • 0
  • 0
  • 0
  • 15
  • 请登录之后再进行评论

    登录
  • 任务
  • 实时动态
  • 发布
  • 单栏布局 侧栏位置: