如何将注释值发送到@Before方法?

时间:2019-12-06 12:22:40

标签: java spring annotations aop

我想更改使用自定义注释注释的方法的主体。

  1. 我创建了自定义注释:

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface RunAsUser {
    }
    
  2. 我写了特殊的处理程序:

    @Aspect
    @Component
    public class RunAsUserAnnotationHandler {
    
        @Before("@annotation(RunAsUser)")
        public void configureAuthentication() {
              AuthenticationUtil.configureAuthentication("ROLE_USER");
        }
    
        @After("@annotation(RunAsUser)")
        public void clearAuthentication() {
            AuthenticationUtil.clearAuthentication();
    
       }
    }
    

    其中configureAuthentication(...)clearAuthentication()是将另一个硬编码的主体值设置为SecurityContext并将其返回默认值的方法。

如果要在注释中将主体值设置为String,如何修改代码?

我想看到这样的东西:

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface RunAsUser {
        String userName();
    }

并使用RunAsUser("stackoverflowUser")编写我的代码,但是我现在知道如何将该值从注释传输到我的configureAuthentication方法中。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

RunAsUser类型的参数添加到configureAuthentication()方法中。从此参数中获取值(“ stackoverflowUser”):

@Before("@annotation(RunAsUser)")
public void configureAuthentication(RunAsUser runAs) {
      // do something with runAs.value()
}