如何使用常量输入多个@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}
我的几个控制器上有一个 @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}