在上下文初始化

时间:2015-10-29 14:20:18

标签: java spring annotations

我需要做一个非常简单的任务:当我的Spring上下文的特定bean正在初始化时,我需要扫描Spring bean的整个上下文,至少有一个用PreAuthorize注释的方法。对于使用PreAuthorize注释的每个方法,我将扫描谓词以获取我感兴趣的特定Spring表达式(定义为自定义Spring表达式)。

该表达式将用于构造权限对象的集合

实施例

@Component
public class Foo{
    @PreAuthorize("hasRole('ADMIN') || hasMyCustomToken('ABCDE')")
    public void foo(){}
}

@Component
public class Bar{
    @PreAuthorize("hasMyCustomToken('FGHIJ')")
    public void bar(){}
}

在上下文中扫描所有可能的表达式参数之后,我将创建一个Set<String> allTokensInMyCodebase = {"ABCDE","FGHIJ"}

我知道我可以获得all beans with an annotation的列表,但只扫描类中的注释。相反,我需要获得所有bean方法。

我也知道这是不常见的做法,因为Spring Security(和Tx,对于@Transactional)在运行时使用AOP拦截带注释的方法,只有在调用该方法时。毕竟,授权表达式通常只应在运行时评估,而不是在上下文启动时评估。

也许我可以尝试针对每个 bean扫描上下文并反思所有方法。

有更聪明的方法吗?我的老板谈到了注释处理,但我找不到任何方法级别的Spring注释处理文档,但AOP除外,AOP只是及时运行而不是提前运行(ahead === context start)

0 个答案:

没有答案