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

时间:2016-11-22 16:15:49

标签: java spring spring-mvc cors spring-annotations

我的几个控制器上都有@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

注释我的所有控制器

2 个答案:

答案 0 :(得分:2)

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

但是你可以编写一个bean后处理器,负责使用javassist在运行时将这个注释放在类上。

答案 1 :(得分:-1)

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

试试这个,常量应该大写。它们之所以成为常数,是因为你将它们宣布为最终版。所以,他们必须大写。

如果这不起作用,请尝试

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

OR

您可以创建常量的另一种方法是

public enum Origins {DOMAIN1,DOMAIN2}