如何使用常量输入多个@CrossOrigins?

How can I use a constant to enter multiple @CrossOrigins?

我的几个控制器上有一个 @CrossOrigin 注释。我希望能够在某处设置 static final 并让所有人都引用它。类似于:

public static final String[] ORIGINS = {"domain1","domain2"};
...
@CrossOrigin(origins = ORIGINS)

但是,我显然有一些语法错误。

解决方案 对于那些有兴趣做同样事情的人,这是我所做的:

@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@CrossOrigin(origins = {
        "domain1",
        "domain2"
})
@Controller
@interface CORSPermittedController {
}

这让我可以用 @CORSPermittedController

注释我所有的控制器

不幸的是,您不能使用 Java 语法来做到这一点。属性值必须是编译常量(原始、String 文字或这些类型的数组)。

但是您可以编写一个 bean post 处理器,它负责在运行时使用 javassist.

将此注释放在 class 上

public static final String[] ORIGINS = {"DOMAIN1","DOMAIN2"};

试试看,常量应该大写。它们是常量的原因是因为您将它们声明为最终的。所以,他们必须大写。

如果不行试试

public static final String[] ORIGINS = {"DOMAINONE","DOMAINTWO"};

另一种创建常量的方法是

public 枚举来源 {DOMAIN1,DOMAIN2}