欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談SpringSecurity注解與AOP切面執(zhí)行順序

 更新時(shí)間:2023年10月07日 08:47:07   作者:冷雨夜中漫步  
這篇文章主要介紹了淺談SpringSecurity注解與AOP切面執(zhí)行順序,引入Spring Security后,在Controller的方法中會(huì)出現(xiàn)Spring Security的方法注解與AOP同時(shí)存在的問題,這是就會(huì)設(shè)計(jì)順序問題,需要的朋友可以參考下

Spring Security注解@PreAuthorize與AOP切面執(zhí)行順序

引入Spring Security后,在Controller的方法中會(huì)出現(xiàn)Spring Security的方法注解與AOP同時(shí)存在的問題,這是就會(huì)設(shè)計(jì)順序問題

@Controller
public class HelloController{
	@RequestMapping(value = "/hello")
	@BeforeController
	@PreAuthorize("validate(#user)")
	public void hello(@RequestParam("user) String user) {
		// 業(yè)務(wù)代碼 
	}
}

上述Controller中 @BeforeController 是一個(gè)業(yè)務(wù)AOP, @PreAuthorize 是來授權(quán)校驗(yàn)user。按照業(yè)務(wù)邏輯,執(zhí)行順序應(yīng)該是如下:

Created with Raphaël 2.3.0 request @PreAuthorize @BeforeController 業(yè)務(wù)代碼

但實(shí)際是 @BeforeController 在 @PreAuthorize 之前。 其實(shí) @PreAuthorize 也是依賴于AOP實(shí)現(xiàn),當(dāng)多個(gè)AOP在一個(gè)方法上時(shí)就會(huì)有順序問題。在Aop中指定順序的方法有:

@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface BeforeController {
}

1、 @Order 注解

@Aspect
@Component
@Order(0)
public class BeforeControllerAction {
    @Before("@annotation(org.numb.web.aop.BeforeController)")
    public void before(final JoinPoint joinPoint) {
        // before切面業(yè)務(wù)代碼
    }
}

@Order 注解里面的值是一個(gè)整數(shù),數(shù)值越大優(yōu)先級(jí)越低,默認(rèn)是 Integer.MIN_VALUE ,即最低優(yōu)先級(jí)。

2、實(shí)現(xiàn) org.springframework.core.Ordered 接口

@Aspect
@Component
public class BeforeControllerAction implements Ordered {
    @Before("@annotation(org.numb.web.aop.BeforeController)")
    public void before(final JoinPoint joinPoint) {
        // before切面業(yè)務(wù)代碼
    }
    @Override
    public int getOrder() {
        return 0;
    }
}

3、通過配置文件配置順序

<aop:config expose-proxy="true">
    <aop:pointcut id="beforeController" expression="@annotation(org.numb.web.aop.BeforeController)"/>
    <aop:aspect ref="beforeControllerAction" id="beforeControllerAction">
        <aop:before method="before" pointcut-ref="beforeController"/>
    </aop:aspect>
</aop:config>

而Spring Security的執(zhí)行順序本質(zhì)上也是由AOP決定,可以通過指定order的方式確定:

@EnableGlobalMethodSecurity(order = 0)

查看源碼可見

public @interface EnableGlobalMethodSecurity {
	/**
	 * Indicate the ordering of the execution of the security advisor when multiple
	 * advices are applied at a specific joinpoint. The default is
	 * {@link Ordered#LOWEST_PRECEDENCE}.
	 * @return the order the security advisor should be applied
	 */
	int order() default Ordered.LOWEST_PRECEDENCE;
}

到此這篇關(guān)于淺談SpringSecurity注解與AOP切面執(zhí)行順序的文章就介紹到這了,更多相關(guān)注解與AOP執(zhí)行順序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中的while無(wú)限循環(huán)結(jié)構(gòu)及實(shí)例

    Java中的while無(wú)限循環(huán)結(jié)構(gòu)及實(shí)例

    這篇文章主要介紹了Java中的while無(wú)限循環(huán)結(jié)構(gòu)及實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • spring+maven實(shí)現(xiàn)發(fā)送郵件功能

    spring+maven實(shí)現(xiàn)發(fā)送郵件功能

    這篇文章主要為大家詳細(xì)介紹了spring+maven實(shí)現(xiàn)發(fā)送郵件功能,利用spring提供的郵件工具來發(fā)送郵件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Java設(shè)計(jì)模式之建造者模式實(shí)例詳解

    Java設(shè)計(jì)模式之建造者模式實(shí)例詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式之建造者模式,結(jié)合具體實(shí)例形式分析了建造者模式的概念、原理、實(shí)現(xiàn)方法與相關(guān)使用注意事項(xiàng),需要的朋友可以參考下
    2017-09-09
  • Linux下Hadoop?2.7.3?安裝搭建過程

    Linux下Hadoop?2.7.3?安裝搭建過程

    Hadoop實(shí)現(xiàn)了一個(gè)分布式文件系統(tǒng)(Hadoop?Distributed?File?System),簡(jiǎn)稱HDFS,這篇文章給大家介紹Linux下Hadoop?2.7.3?安裝搭建過程,感興趣的朋友跟隨小編一起看看吧
    2021-11-11
  • Spring的FactoryBean<Object>接口示例代碼

    Spring的FactoryBean<Object>接口示例代碼

    FactoryBean是Spring框架中的一個(gè)接口,用于創(chuàng)建和管理Bean對(duì)象,它的作用是將Bean的創(chuàng)建過程交給FactoryBean實(shí)現(xiàn)類來完成,而不是直接由Spring容器來創(chuàng)建,本文給大家介紹Spring的FactoryBean<Object>接口,感興趣的朋友一起看看吧
    2023-11-11
  • Java使用StampedLock實(shí)現(xiàn)高效讀寫功能

    Java使用StampedLock實(shí)現(xiàn)高效讀寫功能

    StampedLock 是 Java 8 引入的高性能鎖,提供了三種鎖模式:寫鎖、悲觀讀鎖和樂觀讀鎖,與傳統(tǒng)的 ReentrantReadWriteLock 相比,StampedLock 更注重性能,特別適合讀多寫少的場(chǎng)景,所以本文給大家介紹了Java使用StampedLock實(shí)現(xiàn)高效讀寫功能,需要的朋友可以參考下
    2025-01-01
  • Java基于jeeplus vue實(shí)現(xiàn)簡(jiǎn)單工作流過程圖解

    Java基于jeeplus vue實(shí)現(xiàn)簡(jiǎn)單工作流過程圖解

    這篇文章主要介紹了Java基于jeeplus vue實(shí)現(xiàn)簡(jiǎn)單工作流過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 淺談javap命令拆解字節(jié)碼文件

    淺談javap命令拆解字節(jié)碼文件

    這篇文章主要介紹了拆解字節(jié)碼文件javap命令,對(duì)反編譯感興趣的同學(xué)可以參考下
    2021-04-04
  • JAVA實(shí)現(xiàn)將磁盤中所有空文件夾進(jìn)行刪除的代碼

    JAVA實(shí)現(xiàn)將磁盤中所有空文件夾進(jìn)行刪除的代碼

    這篇文章主要介紹了JAVA實(shí)現(xiàn)將磁盤中所有空文件夾進(jìn)行刪除的代碼,需要的朋友可以參考下
    2017-06-06
  • Java大文件上傳詳解及實(shí)例代碼

    Java大文件上傳詳解及實(shí)例代碼

    這篇文章主要介紹了Java大文件上傳詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02

最新評(píng)論