【问题标题】:get all @PreAuthorize List<string> in spring在春季获取所有@PreAuthorize List<string>
【发布时间】:2019-10-07 08:34:48
【问题描述】:

我试图找出一种方法来从 spring 容器中获取所有预授权注释的列表

假设我有类似下面的东西。

    @PreAuthorize("hasPermission(null, 'opetussuunnitelma', 'LUONTI1')")
@PreAuthorize("hasPermission(null, 'opetussuunnitelma', 'LUONTI2')")
@PreAuthorize("hasPermission(null, 'opetussuunnitelma', 'LUONTI3')")

> I need to get that string(hasPermission(null, 'opetussuunnitelma',
> 'LUONTI2')) or at least List<Map> (x=null,y='opetussuunnitelma',
> z='LUONTI1')

有什么办法可以做到这一点,因为我有 n 个这样的注释,我需要解析所有这些注释字符串并用它做点什么。

【问题讨论】:

  • “解析并做某事”的注释值不是很具有描述性。你想对解析后的字符串做什么?你想什么时候这样做?在执行之前拦截每个带注释的方法可以吗?然后使用 Spring AOP 或 AspectJ。或者您是否需要在应用程序启动后立即获得所有注释?如果是这样,出于什么原因(我想不出一个)?描述问题,而不是你想到的解决方案。您的问题来自XY problem

标签: spring spring-boot spring-mvc spring-security spring-aop


【解决方案1】:

为了在 JVM 中加载您应用的所有类,您可以尝试 Reflection libraryget the loaded beans from Spring 应用程序上下文或手动将它们添加到静态列表中。也就是说,没有明确和适当的方法来实现这一点。

要获取注解,请使用 Java 反射。

更多信息:https://www.geeksforgeeks.org/method-class-getannotation-method-in-java/

public void handleAnnotations(Class c) {
    try { 
        Method[] methods = c.getMethods(); 

        for (Method method : methods) { 
            PreAuthorize[] annotations = c.getAnnotationsByType(PreAuthorize.class);
            // handle annotations
        } 

    } 
    catch (Exception e) { 
        // handle exception
    } 
}

【讨论】:

  • 好的,我做到了,我能够得到注释的字符串值。无论如何,这不能在运行时执行,我想我需要获取所有类名的列表,然后提取方法名并使用上面的代码来获取注释字符串,但是服务器上没有源我必须给出类的路径战争中的文件?
  • 您可以在运行时执行此操作。也不需要源代码,只需要字节码。
  • 您只是从外部网站复制和粘贴代码,甚至没有根据作者的问题对其进行调整。他的代码中没有任何getCustomAnnotation 方法。您的回答中也没有提到@PreAuthorize。我想知道他为什么接受它。你也没有回答他应该如何找到他项目中所有方法的所有注释。
  • @HoratiuJeflea,我不明白你的评论。请您重新措辞或解释一下吗?
  • @Aadam “仅字节码”注释仅可用于获取注释,不能用于获取所有类名
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-20
  • 2019-07-23
  • 2020-11-22
  • 2013-06-08
  • 2013-05-01
  • 2015-11-20
  • 2019-04-28
相关资源
最近更新 更多