首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

spring-security: CglibAopProxy未拦截GlobalMethodSecurityConfiguration的方法调用

Spring Security是一个开源的安全框架,用于为Java应用程序提供身份验证和访问控制功能。它基于Servlet过滤器,可以集成到任何基于Java的Web应用程序中。

CglibAopProxy是Spring框架中的一个代理类,用于在运行时生成动态代理对象。它使用CGLIB(Code Generation Library)库来动态生成子类作为代理类,以实现AOP(面向切面编程)的功能。

在Spring Security中,CglibAopProxy用于实现对被代理对象的方法调用进行拦截和处理。它可以在方法调用之前或之后添加额外的安全验证逻辑,例如检查用户是否有足够的权限来执行该方法。通过使用CglibAopProxy,Spring Security可以实现方法级别的安全性控制。

GlobalMethodSecurityConfiguration是Spring Security提供的一个配置类,用于全局方法级别的安全配置。它可以通过注解(如@Secured、@PreAuthorize、@PostAuthorize)来控制方法的访问权限。然而,当使用CglibAopProxy时,它可能无法拦截GlobalMethodSecurityConfiguration的方法调用。

解决这个问题的一种方式是使用接口代理而不是类代理。Spring Security提供了一个基于接口的代理类,即JdkDynamicAopProxy,它可以正确地拦截和处理GlobalMethodSecurityConfiguration的方法调用。

推荐的腾讯云产品:腾讯云服务器(CVM),提供弹性计算能力,适用于部署和运行各种应用程序。产品介绍链接:https://cloud.tencent.com/product/cvm

请注意,以上回答仅供参考,并不涵盖所有可能的细节和解决方案。在实际应用中,可能需要根据具体情况进行进一步的研究和调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

静态拦截iOS对象方法调用的简易实现

最近出现了几篇关于二进制重排启动优化的文章。所有方案中都需要事先统计所有的函数调用情况,并根据函数调用的频次来进行代码的重排。 这些函数调用中,OC对象的方法调用最多。...统计OC对象的方法调用可以在运行时通过第三方库比如fishhook来Hook所有objc_msgSend调用来实现,也可以在编译后链接前通过静态插桩的方式来实现Hook拦截。...上述的两个方法实现起来比较复杂,要么就要了解LLVM,要么就要熟悉目标文件中间字节码以及符号表相关的底层知识。...本文所介绍的是第三种静态Hook方案,也是依赖于静态库这个前提来实现对objc_msgSend函数进行Hook,从而实现在编译前链接后的OC对象方法调用插桩。 这个方案实现的原理很简单。...---- 采用本文中所介绍的静态Hook方法的好处是我们不必Hook所有的OC方法调用,而是可以有选择的进行特定对象和类的方法调用拦截。

1.8K30

Spring AOP不拦截从对象内部调用的方法原因

拦截器的实现原理很简单,就是动态代理,实现AOP机制。当外部调用被拦截bean的拦截方法时,可以选择在拦截之前或者之后等条件执行拦截方法之外的逻辑,比如特殊权限验证,参数修正等操作。   ...这里出现的问题就是,如果我们要拦截某个类的多个方法,且在该类的方法中使用this调用要拦截的方法时会导致拦截失败。...我们系统中调用的就是这个代理类的findInforAll方法,而该方法中的 this.findDataBaseA();this.findDataBaseB();是不会被AOP拦截的,因为AOP拦截的包名和类名很明显和代理类的不一样...,所以这就是为什么内部调用的方法无法拦截的原因。...虽然这是spring官方推荐的避免内部调用的idea。 查看了相关资料,得到了一种方法,即在method1的内部,通过直接获取当前代理对象的方式然后通过代理对象调用method2,这样触发拦截。

2.6K10
  • Spring Security 实战干货:基于注解的接口角色访问控制

    Spring Security 方法安全 Spring Security 基于注解的安全认证是通过在相关的方法上进行安全注解标记来实现的。...@PreAuthorize 和 @PostAuthorize 侧重于方法调用的控制;而 @PreFilter 和 @PostFilter 侧重于数据的控制。...4.1 @PreAuthorize 在标记的方法调用之前,通过表达式来计算是否可以授权访问。接下来我来总结以下常用的表达式。...4.2 @PostAuthorize 在标记的方法调用之后,通过表达式来计算是否可以授权访问。该注解是针对 @PreAuthorize 。区别在于先执行方法。而后进行表达式判断。...参考资料 [1] Spring Security 实战干货: https://www.felord.cn/categories/spring-security/ [2] 基于配置的接口角色访问控制: https

    1.6K30

    掌握 @transactional 注解@Transactional 注解管理事务的实现步骤Spring 的注解方式的事务实现机制

    的属性配置信息,这个代理对象决定该声明@Transactional 的目标方法是否由拦截器 TransactionInterceptor 来使用拦截,在 TransactionInterceptor...image Spring AOP 代理有 CglibAopProxy 和 JdkDynamicAopProxy 两种,图 1 是以 CglibAopProxy 为例,对于 CglibAopProxy,需要调用其内部类的...这是因为在使用 Spring AOP 代理时,Spring 在调用在图 1 中的 TransactionInterceptor 在目标方法执行前后进行拦截之前,DynamicAdvisedInterceptor...(CglibAopProxy 的内部类)的的 intercept 方法或 JdkDynamicAopProxy 的 invoke 方法会间接调用 AbstractFallbackTransactionAttributeSource...避免 Spring 的 AOP 的自调用问题 在 Spring 的 AOP 代理下,只有目标方法由外部调用,目标方法才由 Spring 生成的代理对象来管理,这会造成自调用问题。

    88460

    @Transactional 自调用失效问题解析

    一、背景 ”脏脏包“在技术群里问了一个问题:”大家有在项目中遇到这样的场景吗 在一个service层重写的方法中调用一个私有方法。...的属性配置信息,这个代理对象决定该声明@Transactional 的目标方法是否由拦截器 TransactionInterceptor 来使用拦截,在 TransactionInterceptor...3.1.2 从源码角度 这是因为在使用 Spring AOP 代理时,Spring 在调用在的 TransactionInterceptor 在目标方法执行前后进行拦截之前,DynamicAdvisedInterceptor...(CglibAopProxy 的内部类)的的 intercept 方法或 JdkDynamicAopProxy 的 invoke 方法会间接调用 AbstractFallbackTransactionAttributeSource...在 Spring 的 AOP 代理下,只有目标方法由外部调用,目标方法才由 Spring 生成的代理对象来管理,这会造成自调用问题。

    1.2K11

    记录一次Spring事务线上异常

    Spring初始化时,会通过扫描拦截对事务的方法进行增强。若目标方法存在事务,Spring就会创建一个Bean对应的代理(Proxy)对象,并进行相关的事务处理操作。...3 源码解析 顺着 saveUser debug: 看到 CglibAopProxy,事务本质上也是一种特殊切面,在创建过程中,被 CglibAopProxy 代理。...事务处理拦截器是 TransactionInterceptor支撑整个事务功能的架构 TransactionInterceptor如何实现事务特性 执行代理类的目标方法时,触发invoke()。...就调用父类rollbackOn(): 只有异常类型为 RuntimeException 或 Error,才true =》才触发 completeTransactionAfterThrowing...而案例抛 Exception,又未指定回滚规则,所以未触发回滚。 4 修正 将所抛异常类型改成 RuntimeException: 这种修改方法不优雅,毕竟异常有时就是固定死不能修改。

    53710

    深度解析 Spring 源码:探秘 CGLIB 代理的奥秘

    覆盖的方法会委托给一个用户定义的拦截器(MethodInterceptor),拦截器中包含了增强的代码。调用流程:当调用代理类的方法时,实际上是在调用被覆盖的方法。...这些方法内部会调用拦截器,拦截器再去调用原始类的相应方法。CGLIB代理的特点:无需接口:CGLIB代理不需要目标类实现任何接口,因为它是通过继承的方式来实现代理的。...方法调用流程:在intercept()方法中,可以调用Method对象的invoke()方法来执行原始方法。这样,我们就可以在原始方法执行前后插入自定义的逻辑,实现方法的拦截和增强。...4.1 拦截器的调用顺序在拦截器链中如何依次执行拦截器,并通过判断和调用不同的拦截器或目标方法来实现拦截和处理逻辑。...invokeJoinpoint()用于执行目标方法,如果拦截器链中已经没有下一个拦截器了,或者拦截器中的某个拦截器选择不继续执行拦截器链,那么就会调用这个方法来执行目标方法。

    16210

    SpringSecurity从入门到实战之Filter过滤器回顾

    /reference/6.0/index.html 中文文档:https://springdoc.cn/spring-security/index.html 过滤器回顾 Spring Security...以上是过滤链的使用,当所有的filter都走完后最终会发送请求到达Servlet 过滤器 Filter: 1.必须实现 Filter 接口 2.过滤器在访问 Web 资源可以对请求进行拦截,并对请求进行预处理和后处理操作...3.如,强制登录过滤器,访问 web 资源时先对请求进行登录检查,已登录可以往后访问,未登录重定向回登录页。...过滤器链 FilterChain: 1.在对一个 web 资源进行拦截处理时的多个 Filter 和 web 资源组成一个 FilterChain 过滤器链。...2.FilterChain 中的 doFilter() 方法非常重要,用于让 Filter 链上的当前过滤器放行,使请求或响应进入下一 Filter 或 web 资源。

    16010

    Spring AOP 创建代理的源码解析

    expose-proxy属性的应用,把代理暴露处理 // 目标方法内部的自我调用将无法实施切面中的增强,所以在这里需要把代理暴露出去 if (this.advised.exposeProxy...).invoke(this); } } 在该方法中完成了增强的植入,主要逻辑就是,每个方法都会有一个拦截器链,在 AOP 中我们称之为增强,然后循环执行每个拦截器链,当执行完所有的拦截器后,才会执行目标方法...return callbacks; } 我们知道使用 CGLIB 来实现代理功能的时候,当代理执行的时候,会调用 intercept 方法,和 JKD 动态代理的 invoke 方法类似;Spring...中 CGLIB 的 intercept 方法如下,该方法在 DynamicAdvisedInterceptor 中,从上面的代理知道,使用它来封装拦截器,它是 CglibAopProxy 的一个子类:...proceed 方法时,和 JDK 的处理是一样的,只不过当执行完所有的拦截器后,执行目标方法调用的是 CglibMethodInvocation 的 invokeJoinpoint 来执行而已;

    1.2K10

    AOP总结目录--- Spring源码从入门到精通(二十四)

    上篇文章说到了aop连接器链的调用,前面递归调用四个拦截器,每次都会调用invoke方法,有一个index参数放拦截器索引,当判断为最后一个拦截器的时候,return跳出循环。...2)、finishBeanFactoryInitialization()方法初始化剩下的单实例bean。A、创建业务逻辑组件和切面组件。...B、AnnotationAwareAspectJAutoProxyCreate拦截组件的创建过程。...2)、CglibAopProxy.intercept()方法拦截。过程A、等到目标方法的拦截器链MethodInterceptor(增强器包装成拦截器)。...B、利用拦截器链式机制,依次进入每一个拦截器进行执行。C、效果,前置通知->目标方法->后置通知->返回通知。如果目标方法抛出异常,则是前置通知->目标方法->后置通知->异常通知。

    23740

    徒手撸框架---实现 Aop

    Spirng 动态的将这些方法拦截器织入到对应的方法。 生成动态代理代理。 提供调用,在使用的时候,调用方调用的就是代理方法。也就是已经织入了增强方法的方法。...invocation 描述的就是一个方法的调用。注意这里指的是“方法的调用”,而不是调用这个动作。...interceptor 大家最熟悉的拦截器,拦截器拦截的目标就是 invcation 包里面的调用。 advisor 这个包里的对象,都是用来描述切面的数据结构。...回顾上面的讲解,我们实现的拦击都会执行 im.proceed() 实际上又会调用这个方法。实现了一个递归的调用,直到执行完所有的拦截器。...所以我们,使用了一个list来保存所有的拦截器。所以我们需要递归的去增加拦截器。当处理完了所有的拦截器之后,才会真正调用调用被增强的方法。我们可以认为,前文所述的动态的织入代码就发生在这里。

    982120

    徒手撸框架--实现Aop

    Spirng 动态的将这些方法拦截器织入到对应的方法。 生成动态代理代理。 提供调用,在使用的时候,调用方调用的就是代理方法。也就是已经织入了增强方法的方法。...invocation 描述的就是一个方法的调用。注意这里指的是“方法的调用”,而不是调用这个动作。...interceptor 大家最熟悉的拦截器,拦截器拦截的目标就是 invcation 包里面的调用。 advisor 这个包里的对象,都是用来描述切面的数据结构。...回顾上面的讲解,我们实现的拦击都会执行 im.proceed() 实际上又会调用这个方法。实现了一个递归的调用,直到执行完所有的拦截器。...所以我们,使用了一个list来保存所有的拦截器。所以我们需要递归的去增加拦截器。当处理完了所有的拦截器之后,才会真正调用调用被增强的方法。我们可以认为,前文所述的动态的织入代码就发生在这里。

    34920

    获取拦截器链MethodInterceptor---Spring源码从入门到精通(二十二)

    返回缓存中存在的 bean: 创建AOP代理---Spring源码从入门到精通(二十一) 这篇文章主要介绍methodInterceptor,返回拦截器(吧增强器包装成拦截器的过程): 一、目标方法执行...(指切面类切入的MathCalculation方法): 容器中保存了组件代理对象(cglib增强后的对象),这个对象保存了详细信息(比如增强器,目标对象等) 1、首先进入CglibAopProxy.intercept...方法,拦截目标方法执行 2、获取将要执行的目标方法 拦截器链getInterceptorAndDynamicInyerceptionAdvice()。...拦截器链(其实就是每一个通知方法,又被包装为拦截器,利用MethodInterceptor机制) 4、如果有拦截器链,吧需要执行的目标对象,目标方法,拦截器链等信息传入创建一个CglibMethodInvocation...对象,并调用proceed()方法。

    79310

    阿里P8面试被问:Spring AOP Proxy创建出来的到底是个啥?

    这个类实际上是AdminUserService的一个子类。它会重写所有public和protected方法,并在内部将调用委托给原始的AdminUserService实例。...修正 既然是因为无法直接访问被拦截类的成员变量,那就换个方式,在UserService里写个getUser()方法,从内部访问获取。...createProxyClassAndInstance 创建代理类后,会调用setCallbacks来设置拦截后需要注入的代码: protected Object createProxyClassAndInstance...,会被Spring拦截,从而进入此intercept(),并在此方法中获取被代理的原始对象。...在原始对象中,类属性是被实例化过且存在的。因此代理类可通过方法拦截获取被代理对象实例的属性。 你改变一个属性,也可让产生的代理对象的属性值不为null。

    57040

    Spring系列九:Spring 事务

    其本质是通过 AOP 功能,对方法前后进行拦截,将事务处理的功能编织到拦截的方法中,也就是在目标方法开始之前启动一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务 优点是不需要在业务逻辑代码中掺杂事务管理的代码...在执行目标方法时进行事务增强操作:当通过代理对象调用Bean方法的时候,会触发对应的AOP增强拦截器,声明式事务是一种环绕增强,对应接口为MethodInterceptor,事务增强对该接口的实现为TransactionInterceptor...,类图如下: ​ 编辑 图片来源网易技术专栏 事务拦截器TransactionInterceptor在invoke方法中,通过调用父类TransactionAspectSupport的invokeWithinTransaction...是因为在Spring AOP 代理时,TransactionInterceptor (事务拦截器)在目标方法执行前后进行拦截,DynamicAdvisedInterceptor(CglibAopProxy...4、同一个类中方法调用,导致@Transactional失效开发中避免不了会对同一个类里面的方法调用,比如有一个类Test,它的一个方法A,A再调用本类的方法B(不论方法B是用public还是private

    1.9K20

    【小家Spring】详解Spring AOP的底层代理JdkDynamicAopProxy和ObjenesisCglibAopProxy的源码分析(介绍CGLIB使用中的坑)

    //proxy:指的是我们所代理的那个真实的对象;method:指的是我们所代理的那个真实对象的某个方法的Method对象args:指的是调用那个真实对象方法的参数。...(method, targetClass); if (chain.isEmpty()) { // 若拦截器为空,那就直接调用目标方法了 // 对参数进行适配:主要处理一些数组类型的参数...public得 就直接调用目标方法(不拦截) if (chain.isEmpty() && Modifier.isPublic(method.getModifiers())) { Object...B继承自A同时又有对A的引用,B会重写所有的A类里面的非Final、非private方法,从而可以在目标方法调用前后进行对应的增强了。...因此它也只能拿到null 而我们调用的getAge()方法它被代理过,所以他能拿到正确的值:10。 备注:若采用JDK动态代理不回存在此种现象,因为接口代理的都是方法。

    3.2K52
    领券