当前位置: 首页 > news >正文

Java自定义注解校验token并直接返回给前端状态

自定义注解 CheckToken 

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CheckToken {
}

编写验证token的方法TokenInterceptor 

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;public class TokenInterceptor extends HandlerInterceptorAdapter {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {if (handler instanceof HandlerMethod) {HandlerMethod handlerMethod = (HandlerMethod) handler;// 检查方法是否有自定义注解if (handlerMethod.getMethodAnnotation(CheckToken.class) != null) {// 获取请求中的tokenString token = request.getHeader("token");// TODO 这里添加你的逻辑来验证token的合法性boolean validateToken = validateToken(token)if (!validateToken) {// 如果token无效,直接返回错误响应给前端response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);response.getWriter().write("Token is invalid or expired");return false; // 拦截请求,不继续执行后续的处理器}}}return true; // 继续执行后续的处理器}private boolean validateToken(String token) {// TODO 这里添加你的逻辑来验证token的合法性// 这里添加你的token验证逻辑// 返回true表示token有效,返回false表示无效或过期return "expected-token-value".equals(token);}}

方法注册到Spring

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 WebConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new TokenInterceptor());}
}

controller直接调用

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {@CheckToken @GetMapping("/user")public String user() {return "This is a test endpoint";}
}

http://www.lryc.cn/news/384382.html

相关文章:

  • C++ | Leetcode C++题解之第200题岛屿数量
  • Linux安全配置
  • vue实现不预览PDF的情况下打印pdf文件
  • C++ | Leetcode C++题解之第199题二叉树的右视图
  • [leetcode]圆圈中最后剩下的数字/ 破冰游戏
  • mysql数据库的管理
  • Java项目分层(持续更新中)
  • 2024年软件测试面试题大全【答案+文档】
  • 数据赋能(131)——体系:数据转换——概述、关注焦点
  • 【自然语言处理系列】掌握jieba分词器:从基础到实战,深入文本分析与词云图展示
  • TikTok短视频矩阵系统
  • 码题杯:我会修改图
  • MongoDB Map-Reduce 简介
  • 某平台小程序逆向思路整理
  • 黑马苍穹外卖6 清理redis缓存+Spring Cache+购物车的增删改查
  • 鸿蒙开发系统基础能力:【@ohos.systemTime (设置系统时间)】
  • CVE-2020-26048(文件上传+SQL注入)
  • 【面试题】信息系统安全运维要做什么
  • 引导过程与服务器控制
  • 前置章节-熟悉Python、Numpy、SciPy和matplotlib
  • 在Ubuntu上安装和配置配置服务器防火墙(CSF)的方法
  • Python-井字棋
  • 39.客户端与服务端断开事件handler
  • SSL 之 http只用crt格式证书完成SSL单向认证通信
  • 实训作业-人事资源管理系统
  • Flink 资源静态调度
  • upload-labs第十三关教程
  • 基于springboot实现宠物商城网站管理系统项目【项目源码+论文说明】计算机毕业设计
  • Fragment与ViewModel(MVVM架构)
  • Linux开发讲课16--- 【内存管理】页表映射基础知识2