springboot通过类注解对请求做拦截处理

springboot 注解+拦截器 实现角色权限拦截 第一步: 需要注解实现权限拦截,先创建自定义注解类: import java.lang.annotation.*; /** * 角色注解 * */ @Target({ElementType.METHOD}) // 方法注解 @Retention(RetentionPolicy.RUNTIME) // 运行时 //@Documented public @in... 阅读详情

RequireAuth 注解:

import java.lang.annotation.*;

/**
 * @author zjy
 * 请求的方法或者类上面加此注解会做权限拦截  参考AuthAspect
 *
 */
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequireAuth {
    boolean require() default true;
}

注解处理:(切面)

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.util.*;

/**
 * @author zjy
 * 权限拦截
 * 注意:类已加上权限注解@RequireAuth的情况下,方法上的注解@RequireAuth(require = false)不会生效,
 * 建议单独弄一个controller放不需要权限的请求处理方法:
 * 指定别名防止controller name冲突 @RequestMapping(path = "/user", name = "noAuthUserController")
 */
@Aspect
@Slf4j
@Component
@Order(1) //切面执行优先级,越低执行优先级越高 
public class AuthAspect {

    /**
     * 定义切点,这是一个标记方法
     * com.xxx.controller下的所有子包及方法
     */
    @Pointcut("execution( * com.xxx.controller..*.*(..))")
    public void anyMethod() {
    }

    @Around("anyMethod()")
    public Object auth(ProceedingJoinPoint joinPoint) throws NoSuchMethodException {
        Class clazz = joinPoint.getTarget().getClass();
        //类注解 优先
        RequireAuth annotation = (RequireAuth) clazz.getAnnotation(RequireAuth.class);
        if (annotation == null) {
            //方法注解
            Method method = getMethodByJointPoint(joinPoint);
            annotation = method.getAnnotation(RequireAuth.class);
        }
        if (annotation != null && annotation.require()) {
            //获取到注解且注解要求auth,开始拦截
            ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = servletRequestAttributes.getRequest();
            String action = request.getMethod();
            String uri = request.getRequestURI();
            log.info("action:[{}],uri:[{}]",action,uri);
            //处理自己的业务逻辑,登录状态拦截或者日志打印等等
            if(uri.equals("exception")){
            //主动抛出异常不再往下执行方法
                throw new RuntimeException("拦截啦");
            }
        }
        //执行方法
        Result result = null;
        try {
            result = (Result) joinPoint.proceed();
            return result;
        } catch (Throwable throwable) {
            log.error("执行方法出错:[{}],[{}]", joinPoint.getSignature().getName(), throwable.getMessage());
            throw new RuntimeException("方法执行失败");
        }

    }
	
	//获取方法
    private Method getMethodByJointPoint(JoinPoint joinPoint) {
        Class clazz = joinPoint.getTarget().getClass();
        String methodName = joinPoint.getSignature().getName();
        Class[] parameterTypes = ((MethodSignature) joinPoint.getSignature()).getMethod().getParameterTypes();
        try {
            Method method = clazz.getMethod(methodName, parameterTypes);
            return method;
        } catch (NoSuchMethodException e) {
            throw new RuntimeException("方法执行失败");
        }
    }


}
细聊Oracle通过ODBC数据源连接SQL Server数据库     类似文章搜索引擎上有很多,内容大致相同,今天所谓细聊是因为我在借鉴这些文章时候走了些弯路,所以写此文,为自己备忘,同时如果能为初涉此处知识点的小伙伴提供些帮助就更好了,废话不多说。    我的应用场景:    项目系统使用oracle数据库,与客户的第三方系统供应商实现资源共享,对方为sql server数据库;    我的测试开发环境为64bitwin7PC机,本机上装有64位Oracl... 阅读详情

相关推荐

ThinkPHP 8.1 + think-swoole 4.1 实战:5分钟搞定WebSocket聊天室(附完整代码)

本文详细介绍了如何使用ThinkPHP 8.1和think-swoole 4.1快速构建高并发WebSocket聊天室。通过5分钟实战教程,开发者可以轻松实现用户列表、消息广播等核心功能,支持2000+并发连接,适用于客服系统、在线协作等实时通信场景。

ol789012345的博客 126

SpringBoot AOP(拦截有注解的方法和类)

自定义注解,通过aop来实现简单鉴权 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0

qq_17303159的博客 3032

京东联盟h5st(3.1)加密参数逆向实战与反爬对抗策略

本文详细解析了京东联盟h5st(3.1)加密参数的逆向分析与实战破解过程。通过接口分析定位关键加密函数,拆解h5st结构并还原其基于SHA256和HMAC-SHA256的加密逻辑,最终使用Python集成JavaScript环境成功复现加密算法,并分享了应对反爬的频率限制、IP封禁及算法升级等对抗策略。

weixin_29246195的博客 1740

spring boot 注解+过滤器+拦截器 实现自定义注解拦截

当前业务有个年份管理界面,比如把2020年此年份关闭 ,那么2020年此年份的所有数据都无法再进行相关操作(增删改),但是可以查询。方案:后端写个拦截器,实现接口拦截,如果查出此年份已关闭,后端给出提示问题:比较完美的解决了问题...

u013170178的博客 2762

CGAL-5.6的安装与编译(Win10+vs2022+CGAL-5.6+Boost1.82.0)

CGAL是Computational Geometry Algorithms Library(计算几何算法库)的缩写,C++的高效算法库。CGAL只是一个头文件库(从5.0版本开始),这意味着CGAL无需编译,只需安装好CGAL的依赖项即可。CGAL5.6。

baidu_34931359的博客 3903

联想Win10改Win7设置BIOS指南

通过本文的指南,你应该能够成功地在联想Win10电脑上设置BIOS以支持Windows 7的安装和运行。尽管Windows 10提供了许多现代化的功能和改进,但如果你因特定需求而更倾向于使用Windows 7,那么本文提供的步骤将帮助你顺利实现这一转换。请记住,在更改操作系统前务必做好充分的准备工作,并在安装过程中保持耐心和细心。祝你安装顺利!

mmoo_python的博客 2042

第三十四章:SpringBoot配置类WebMvcConfigurerAdapter

WebMvcConfigurerAdapter配置类其实是Spring内部的一种配置方式,采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制,下面我们来看一下该类内的常用方法。 本章目标 继承WebMvcConfigurerAdapter采用JavaBean形式实现个性化配置定制。 SpringBoot 企业级核心技术学习专题 专题 专题名称 专...

恒宇少年De成长之路 632

STM32笔记:高精度脉冲宽度计 双输入捕获+DMA方式

本文介绍如何用STM32F107VC实现高精度的脉冲宽度计(测量周期脉冲的占空比)。 采用定时器的外部输入捕获功能,双输入+DMA方式,追求硬件的极限表现。

st01lsp的专栏 5289

Spring Boot拦截器(注解)。防止重复提交 全代码

Spring Boot 防止重复提交 全代码

46633791的博客 1130

【招商银行笔试题汇总】[全网首发]2024-04-23-招商银行春秋招笔试题-三语言题解(CPP/Python/Java)

🏳️ 难难难!!!本次招商银行的笔试算是今年春招最难的场次之一了K小姐所在的公司有 NNN 个部门,编号从 111 到 NNN。由于公司网络系统比较老旧,对于同一个数据 ddd,不同部门记录的值可能不同。数据 ddd 在各部门被记录为 d1,d2,...,dNd_1, d_2, ..., d_Nd1​,d2​,...,dN​。公司提出可以通过会议来实现数据的一致性。每次会议会让相邻编号范围内的所有部门一起参加,如果有超过半数的部门能够对数据 ddd 的值达成共识,那么在此次会议后,参与会议的所有部门会将

春秋招笔试突围 3463

机床联网系列总结

总结机床联网专栏,两个好用的工具介绍,以及后续提升的方法和建议。

若云流风的专栏 934

SpringBoot 利用自定义注解实现AOP拦截控制

在 SpringBoot 中,利用 AOP 实现拦截控制的方法有很多,个人觉得相对比较简洁、比较简单的方式是通过自定义注解实现拦截控制。这种实现方式只需要预先定义一个新的注解,并实现拦截控制的具体业务逻辑,当我们想要拦截某一个方法进行控制时,只需要在方法前加上该注解,通常不需要做过多的调整。在实际工程应用中,这种实现方式确实有效提升了开发效率。 AOP 的基本概念 AOP 是 Aspect-oriented Programming 的缩写,常译作”面向切面编程“,通俗理解就是在程序运行的链路中,从某一个横切

Ulrich蚊子Blog 1万+

【大模型】Coze AI 智能体工作流从配置到使用实战详解

Coze 扣子智能体工作流从配置到使用实战详解

congge 1万+

SpringBoot十二、SpringBoot系列web篇之过滤器Filte详解

JavaWeb三大组件Servlet、Filter、Listener,其中之一便是过滤器Filter。其实,Filter我们平常用的不多,一般多为项目初期搭建web架构的时候使用,后面用的就少了,在日常业务开发中不太可能碰到需要手写Filter的场景。下面我们两带着以下几个问题,学习一下SpringBoot中怎样使用Filter。在SpringBoot中如何配置Filter过滤器?过滤器Filter在SpringBoot中的执行顺序是怎样的?

TTDreamTT的博客 1427

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SpringBoot自定义拦截器,拦截多种请求

在Spring+Spring MVC+Mybatis中,也就是SSM框架中,我们得自定义拦截器是在springmvc-servlet.xml中配置拦截器,而SpringBoot是舍去了许多配置文件,以代码代替配置文件,在配置的时候我们需要用到@Configuration这个注解,这个注解是将这个类注册成为一个Beans,虽然说springboot得大部分配置都可以通过properties或者yml...

a125129167的博客 7417

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SpringBoot通过拦截器获取请求参数和返回结果进行操作

SpringBoot项目的创建和初始化在这里就不在重复 一.实现请求拦截器处理数据 自定义拦截器 在SpringMVC中的 Interceptor拦截器才用实现 HandlerInterceptor的方式,实现其中的三个方法。 preHandle(): 该方法在请求处理之前执行,SpringMVC 中的Interceptor 是链式的调用的,在一个应用中或者说是在一个请求中可以同时存在多个Interceptor 。每个Interceptor 的调用会依据它的声明顺序依次执行,而且最先执行的都是Interce

TimeQuantum的博客 2万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Controller层自定义注解拦截request请求校验

controller层自定义注意拦截request请求

卓越之识论道,平常之识论事,狭隘之识论人 1869

SpringBoot(含注解)详解

注解 @SpringBootApplication 申明让spring boot自动给程序进行必要的配置,这个配置等同于: @Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三个配置。 @ResponseBody 表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用,用于构建RESTful的api。在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果

Record_Algorithm 5055

springboot通过servlet拦截器对请求防重处理

1.在项目开发初期可以不打开防重策略,只需要修改yaml配置的是否开始防重的开关;2.后期项目上线,大家可根据系统负载情况,判断是否做负载均衡,如果做负载均衡,请设置对应的redis或者对应的db来控制防重,在单点的情况下,大家可以用内存来进行防重。3.如果大家需要做自己的防重机制的实现,请写对应的实现类 来实现 RepeatService类,并做好yaml配置即可。

weixin_40951507的博客 1834

在springboot中使用拦截器

目前有一个需求,是在现有项目中集成一个简单的登录功能,想到了使用过滤器和拦截器实现,这篇文章介绍如何使用spring的拦截器。拦截器是在面向切面编程中应用的,就是在你的service或者一个方法前调用一个方法,或者在方法后调用一个方法。是基于JAVA的反射机制。过滤前->拦截前->Action处理->拦截后->过滤后 1)预处理preHandle()方法2)后处理postHandle()方法3)返回处理afterCompletion()方法注:一般使用preHandle这个拦截器进行预处理,对url进行请求

进击的豌豆的博客 1万+

SpringBoot请求参数处理 常见注解

请求参数处理 SpringBoot在底层使用SpringMVC完成web请求处理。 ⭐️请求映射与Rest风格 形如@xxxMapping这样的注解用来处理请求映射,最常见的如@RequestMapping。 SpringBoot现在支持Rest风格,Rest风格使用HTTP请求方式动词来表示对资源的操作,例如: 获取用户 删除用户 修改用户 保存用户 传统风格 getUser deletUser updateUser saveUser Rest风格 GET DELETE PUT PO

Suprit's blog 2182

SpringBoot —— AOP注解式拦截与方法规则拦截

AspectJ是一个面向切面的框架,它扩展了Java语言。AspectJ定义了AOP语法,所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。   SpringBoot中AOP的使用方式主要有两种:注解式拦截与方法规则拦截,具体使用如下文所示。 一、创建一个简单springboot 2.03项目,添加aop依赖 <dependency> <...

十年代码写十年 1239

springboot拦截请求路径_springboot之路径拦截器

方式一:不推荐,在代码中添加路径1、写一个拦截器,继承HandlerInterceptor类importorg.springframework.stereotype.Component;importorg.springframework.web.servlet.HandlerInterceptor;importjavax.servlet.http.HttpServletRequest;import...

weixin_39595487的博客 3477

springboot对请求的接口实现token拦截以及参数校验

token拦截以及参数校验token拦截添加依赖JWT讲解+自定义注解自定义工具类JwtUtils自定义拦截器自定义UserUtils配置拦截器请求测试参数校验post请求引入依赖+使用效果get请求效果 token拦截 参考 SpringBoot集成JWT实现token验证 springboot基于token实现登录认证 Springboot项目中使用过滤器Filter+ThreadLocal实现对请求用户的拦截和保存 三个结合起来,构造过程: 添加依赖——自定义注解——自定义工具类JwtUtils——自

qq_50485858的博客 7040

Java通过自定义注解实现拦截类及其内部所有方法

Java通过自定义注解实现拦截类及其内部所有方法 SpringBoot项目自定义注解实现拦截类及其内部方法 1.引入AOP依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> 2.编写注解 import java.lang.annota

白给卢的博客 3389

SpringBoot 三种拦截http请求方式Filter,interceptor和aop

SpringBoot 三种拦截http请求方式Filter,interceptor和aop。 这三种拦截方式的拦截顺序是:filter—>Interceptor-->ControllerAdvice-->@Aspect -->Controller; 这三种方式的区别:1.过滤器 过滤器拦截web访问url地址。 严格意义上讲,filter只是适用于web中,依赖于Servlet容器,利用Java的回调机制进行实现。 Filter过滤器:和框架无关,可以控制最初的http请求,

u014496893的博客 2万+
上一篇: 摘抄:Wireshark使用入门
下一篇: 转载:MySQL千万级别大表,你要如何优化?
zjy_java
博客等级 码龄8年 1粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值