spring-java面向切面拦截器

news2024/11/17 16:01:04

        切面,就是可以在代码执行的时候,在它执行的前面添加一个东西,一般我们用来做登陆拦截器验证以及敏感词的过滤。

        他就3个东西,指定切点(要执行的代码),before代码执行前面加东西。after代码后加东西。一般我们只用切点和before。

1.引入相关依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

2.passToken注解(可有可无)

主要是为了让加注解的接口可以访问,比如说登陆和注册

package xxxx

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;
}

3.切面

这里需要写一个返回方法 sendJsonMessage,用于返回信息

package com.dengta.tanzhiwcustomermarket.config;


import com.alibaba.fastjson.JSONObject;
import com.dengta.tanzhiwcustomermarket.tools.RedisUtils;
import com.dengtacj.tanzhiw.common.api.ResultCode;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

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

@Aspect
@Configuration
public class ControllerAspect {

    private final static Logger logger = LoggerFactory.getLogger(ControllerAspect.class);

    // 定义切点Pointcut  自行写入对应的controller包路径
    @Pointcut("execution(* com.dengta.tanzhiwcustomermarket.controller.*.*(..))")
    public void pointCut() {
    }

    @Before("execution(* com.dengta.tanzhiwcustomermarket.controller.*.*(..))&&!@annotation(com.dengta.tanzhiwcustomermarket.config.PassToken)")
    public void before(JoinPoint joinPoint) throws Throwable {
        //获取token
        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = requestAttributes.getRequest();
        String accessToken = request.getHeader("authorization");
        HttpServletResponse response = requestAttributes.getResponse();
        if(accessToken==null){//没有token直接结束
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("code",500);
            jsonObject.put("message","暂未登录或token已经过期");

            sendJsonMessage(response,jsonObject);//必须要有这个
            return;//放行
        }
    }

    public static void sendJsonMessage(HttpServletResponse response, Object obj) {
        try {
            response.setContentType("application/json; charset=utf-8");
            response.setStatus(200);
            ServletOutputStream outputStream = response.getOutputStream();
            outputStream.write(obj.toString().getBytes("UTF-8"));
            outputStream.close();
            response.flushBuffer();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

测试结果

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/737500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AC220V转负压5V芯片方案-220v转-5vic

AC220V到负压5V的电路转换 问题描述 --------- 如何将AC220V电压转换为负压5V输出&#xff0c;并且在输入电压范围为45V至265V的情况下工作&#xff1f;还要求该电路能够提供可调的电流范围&#xff0c;从100mA至2A。同时&#xff0c;所需的芯片为AH8699&#xff08;在700mA以…

BaGet做了一个Nuget私有服务器,Nginx代理之后还是会请求被代理得地址

Nuget搭建和使用可以参考官网得文档 https://loic-sharma.github.io/BaGet/installation/docker/ 这是我用Nginx代理之后出现得问题&#xff0c;观察请求url和响应回来得配置。配置中得ip地址得url是我被代理得下游地址&#xff0c;所以是无法访问的。 我原本以为是要去server…

怎么扫描二维码看视频?视频转成二维码的技巧

通过扫码来查看视频&#xff0c;是现在很多人都会选择一种视频展现方式&#xff0c;那么怎么制作视频二维码呢&#xff1f;下面给大家分享一个在线二维码生成器&#xff0c;支持多种二维码制作&#xff08;免费在线二维码生成器-二维码在线制作-音视频二维码在线生成工具-机智熊…

手机上有好用的时间管理工具吗?

在日常工作中&#xff0c;时间管理是非常重要的一项技能。这样做不仅可以更好地安排工作计划&#xff0c;还能有效减轻工作压力&#xff0c;减少时间的浪费&#xff0c;从而达到提高工作效率的目的。那么&#xff0c;随着手机的普及和智能化移动应用的不断涌现&#xff0c;我们…

【ARM Coresight 系列文章 4 - ARM Coresight APB-AP 介绍】

文章目录 APB-AP 介绍及使用APB-MuxROM TableROM Table entries bit 分配 APB-AP 介绍及使用 下图是一个 常见的DAP 结构图&#xff0c;其AP使用的是APB-AP。 图 1-1 SWJ-DP 通过监控电路选择外部串行总线SWD或者 外部JTAG&#xff1b;通过 DPACC中的select register 选着AP(…

润和软件HopeStage与易捷行云EasyStack ECF×86云基础设施平台完成产品兼容性互认证

近日&#xff0c;润和软件HopeStage操作系统与北京易捷思达科技发展有限公司&#xff08;以下简称“易捷行云EasyStack”&#xff09;ECF86云基础设施平台完成产品兼容性测试。 测试结果表明&#xff0c;企业级通用操作系统HopeStage V1.0产品与ECF86云基础设施平台可以顺利适…

MF31:VBA_在Excel中加入页码

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

电路分析基础学习(上)第5章

李瀚荪版电分第二版 目录 电容的定义 电容为什么能阻断直流 电容的储能计算公式 电感的定义 电阻与阻抗的区别 电感为什么在直流通路中起着短路的作用 电感的储能计算公式 ----------------------------------------------------------------------------------------…

SSMP整合案例(16) vue java联合实现分页条件查询 终结篇

那么 之后 我们就要处理按条件查询了 简单说 就是我们在分页时 条件也要一起带过去 其实 我们之前写的App组件中 他们已经被定义上了 我们看到App.vue的这个位置 我们用了 formData 其中对应了三个条件 然后 我们在 src的App组件下 找到 getPages 中定义data的部分 然后改成…

idea显示左下角service

展示效果&#xff1a; 解决方案&#xff1a; 1.点击左下角 这个按钮 2.点击蓝色英文&#xff0c;add services 3.找到众多模板中的springboot&#xff0c;点击即可

【C++】手把手教你模拟实现vector

vector模拟实现 前言正式开始三个成员变量无参构造析构push_back[ ]重载pop_backinserterase迭代器失效问题insert迭代器失效erase迭代器失效 深浅拷贝拷贝构造函数赋值运算符重载 n个val构造resizefront和backfrontback 前言 这篇写的是vector的模拟实现。 如果对于vector不…

TI系列——CC2340B1 Uniflash烧录指南

一、物料准备 1.1 硬件准备 1、XDS110-PLUS2.0或者TI LaunchPad&#xff1a; 图 1 XDS110-PLUS2.0中包含&#xff1a; XDS110调试器、USB-A to Type-C-B电缆、具有2x5 2.54mm连接器的10引脚扁平电缆、具有2x5 1.27mm连接器的10引脚扁平电缆、具体请看说明指南文档。 图 2 上…

【MyBatis-Plus】DML编程控制 代码生成器(文末赠书)

1&#xff0c;DML编程控制 查询相关的操作我们已经介绍完了&#xff0c;紧接着我们需要对另外三个&#xff0c;增删改进行内容的讲解。挨个来说明下&#xff0c;首先是新增(insert)中的内容。 1. id生成策略控制 前面我们在新增的时候留了一个问题&#xff0c;就是新增成功后…

ArcGIS问题解决——CAD中的字体加载到ArcMap显示乱码

ArcGIS问题解决——CAD中的字体加载到ArcMap显示乱码 CAD中的字体加载到ArcMap显示乱码&#xff0c;是因为字符集的问题&#xff0c;解决办法即修改注册表中默认字符集为简体中文字符集即可。 ①winR,输入regedit&#xff0c;回车 ②找到计算机\HKEY_CURRENT_USER\SOFTWARE\…

网络变压器的工作原理

网络变压器又称“数据汞”&#xff0c;或网络绝缘变压器。在网络接口中起到两个主要作用&#xff1a; 一是通过将差模耦合和线圈耦合相结合的过滤器&#xff0c;增强PHY传输的差分信号的数据传输&#xff0c;并将电磁场转换为不同电平连接线的另一端&#xff1b; 二是隔离线连…

有人相爱,有人夜里开车看海,有人leetcode第一题都做不出来​​

LEETCODE 1. 两数之和 题解地址 https://leetcode.cn/problems/two-sum/solution/liang-shu-zhi-he-by-leetcode-solution/ 有人相爱&#xff0c;有人夜里开车看海&#xff0c;有人leetcode第一题都做不出来。 题目 给定一个整数数组 nums 和一个整数目标值 target&#xff0…

【运维】Linux的文件权限,文件所属组别,用户组访问文件的权限设置,将用户加入某个组,创建用户组

文章目录 文件权限添加一个组将用户加入组将文件设置为组访问更改所属用户查看Linux系统中用户所属的组 文件权限 添加一个组 添加一个组&#xff1a; 使用groupadd命令可以添加一个新的组。例如&#xff0c;要添加一个名为 “mygroup” 的组&#xff0c;可以运行以下命令&…

每日汇评:21日均线是黄金突破最大障碍,看涨形态逐步形成

1、美元在非农数据惨淡后持续上涨&#xff0c;金价维持上周涨幅&#xff1b; 2、美债收益率的反弹也抑制了金价的上涨空间&#xff1b; 3、金价在周五确认了一个看涨楔形&#xff0c;但重夺21日移动均线是关键&#xff1b; 黄金在本周初触及的1930美元关口下方徘徊&#xff0…

SciencePub学术 | 计算机决策类重点SCIEEI征稿中

SciencePub学术 刊源推荐: 计算机决策类重点SCIE&EI征稿中&#xff01;信息如下&#xff0c;录满为止&#xff1a; 一、期刊概况&#xff1a; 计算机决策类重点-01 【期刊简介】IF&#xff1a;4.0-4.5&#xff0c;JCR2区&#xff0c;中科院3区&#xff1b; 【出版社】世…

基于ChatGPT的企业微信机器人

1、openAI账号 登录OpenAI的账号后&#xff0c;再点击右上角的“Personal”图标&#xff0c;然后点击“view API keys”进入API页面。 点击“create new secret key”按钮。 生成秘钥之后&#xff0c;把秘钥复制下来。 2、拉取项目代码 git clone https://github.com/zhay…