当前位置: 首页 > 面试题库 >

Spring AOP:如何获取建议方法的注释

施阎宝
2023-03-14
问题内容

我想用Spring / AOP和注解实现声明式安全性。如您在下一个代码示例中看到的,我使用参数“
allowedRoles”定义了“受限注释”,用于定义允许谁执行建议的方法。

    @Restricted(allowedRoles="jira-administrators")
        public void setPassword(...) throws UserMgmtException {             
               // set password code
               ...
        }

现在的问题是,在我的建议中,我无法访问已定义的注释:

public Object checkPermission(ProceedingJoinPoint pjp) throws Throwable {

    Signature signature = pjp.getSignature();
    System.out.println("Allowed:" + rolesAllowedForJoinPoint(pjp));
            ...
}

private Restricted rolesAllowedForJoinPoint(ProceedingJoinPoint thisJoinPoint)
        {
            MethodSignature methodSignature = (MethodSignature) thisJoinPoint.getSignature();
            Method targetMethod = methodSignature.getMethod();

            return targetMethod.getAnnotation(Restricted.class);
        }

上面的方法总是返回null(根本没有找到注释)。有一个简单的解决方案吗?

我阅读了有关使用AspectJ代理的内容,但我不希望使用此代理。


问题答案:

我认为@Restricted是您的注释。如果是这种情况,请确保您具有:

@Retention(RetentionPolicy.RUNTIME)

在您的注释定义中。这意味着注释将在运行时保留。



 类似资料:
  • 一些日志记录需要在类的静态方法执行前后完成。我试图使用Spring AOP实现这一点,但它不起作用,对于普通方法来说,它是起作用的。请帮助我理解如何实现这一点,如果可以使用注释来完成,那就太好了。

  • 问题内容: 我有以下注释。 MyAnnotation.java SomeAspect.java SomeOther.java 在上面的课中, @MyAnnotation中* 传递了“ ABC ” 。现在如何在 SomeAspect.java 类的 处理 方法中访问“ ABC ”值? *** 谢谢! 问题答案: 您可以从ProceedingJoinPoint获取签名,如果方法调用,只需将其转换为Me

  • 我有以下问题: 我已经为安全性创建了注释: 在我具有类之间的继承性的情况下,是否也有可能所有类都具有@Security注释来获得最具体的定义? 约西

  • 问题内容: 我试图得到昨天的日期。所以我写了下一个函数: 但这给了我下一个警告: 而且它没有用。 谢谢您的帮助。 问题答案: Date#getDate() 是JDK 1.1之后不推荐使用的方法。您应该改用 Calendar 类来操纵日期。 从 API : 在JDK 1.1之前,Date类具有两个附加功能。它允许将日期解释为年,月,日,小时,分钟和秒值。它还允许格式化和解析日期字符串。不幸的是,这些

  • 我有以下注释。 在上面的类中,我在@MyAnnoting中传递了“ABC”。现在我如何在某些spect.java类的程序方法中访问“ABC”值? 谢谢

  • 我有一个方面,处理所有有自定义注释的方法。 注释有一个枚举参数,我必须在方面中获得值: 有没有办法从ProcedingJoinPoint获得实现方法的签名?