【问题标题】:How can I use a constant to enter multiple @CrossOrigins?如何使用常量输入多个@CrossOrigins?
【发布时间】:2017-04-06 09:56:59
【问题描述】:

我的几个控制器上有一个@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 spring spring-mvc cors spring-annotations


    【解决方案1】:

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

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

    【讨论】:

    • 对!那是我缺少的部分。实际上,与其使用javassist,更好的方法是使用Spring 使用元注释的能力并创建我自己的。这也实现了“在一个地方改变它”的目标。
    【解决方案2】:

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

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

    如果不行,试试

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

    创建常量的另一种方法是

    公共枚举起源 {DOMAIN1,DOMAIN2}

    【讨论】:

    • 抱歉,这没有任何意义。它没有回答这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多