【问题标题】:Use Spring Properties in Java with CrossOrigin Annotation or in Spring-Config XML在 Java 中使用带有 CrossOrigin 注释或 Spring-Config XML 的 Spring 属性
【发布时间】:2018-05-14 10:37:36
【问题描述】:

我在 Spring 中使用 CrossOrigin 注解。 现在我想注入一个属性作为注释的值。我不让这个工作。

现在我像这样访问我的财产:

@Value("${settings.cors_origin}")
String cors_origin;

我想将此属性注入 CrossOrigin 注释:

....
@CrossOrigin(origins = cors_origin)
@RequestMapping(value="/request", method= RequestMethod.GET, produces = "application/json")
public ResponseEntity<?> getMethod()
{
...

我已经尝试过这样的事情:

@CrossOrigin(origins = "${settings.cors_origin}")

编辑 1:

现在我尝试在我的 spring 配置中全局设置 CORS-Header:

  <context:property-placeholder location="classpath*:*appsettings.properties"/>

 <mvc:cors>
 <mvc:mapping path="/api/**"
             allowed-origins="${test}"
             allowed-methods="GET, PUT, OPTIONS, POST"/>
</mvc:cors>

此设置也不起作用!允许的来源与属性文件中指定的来源不同。我认为它不会将变量转换为值?当我在 spring config allowed-origins 中手动设置 IP 地址时,它正在工作。设置有问题...

appsettings.properties:

test=http://192.168.1.200

编辑 2:

S O L V E D

经过一段时间的故障排除后,我现在为我解决了这个问题 :-) 现在我再次使用注释@CrossOrigin。我必须将 RequestMethod Options 添加到 Spring RequestMapping:

 @RestController
 @CrossOrigin(origins = {"${settings.cors_origin}"})
 @RequestMapping("/api/v1")
 public class MainController {


  @RequestMapping(value="/request", method = {RequestMethod.GET, RequestMethod.OPTIONS}, produces = "application/json")
  public ResponseEntity<?> getMethod()
  {

感谢您的帮助!

【问题讨论】:

  • 这个解决方案是否适用于 Spring Boot 2.0.2.RELEASE 而不是 2.0.4.RELEASE?所有包含 SpEL 的字符串都不再翻译,例如保持为${settings.cors_origin}

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


【解决方案1】:

您需要将字符串数组传递给@CrossOrigin 注释的origins 参数。这是用花括号完成的:

@CrossOrigin(origins = {"${settings.cors_origin}"})

然后在 Spring 中,src/main/resources/application.properties:

settings.cors_origin:http://localhost:4200

注意,不要在 application.properties 中的键值对右侧包含 cmets 或额外空格。值后多余的空格可能会导致键值对被错误读取。

【讨论】:

  • 我在位于资源文件夹中的属性文件中指定了 settings.cors_origin。我使用 PropertyPlaceholder。该设置不起作用。它不会将设置的路径转换为正确的值..
  • Cors 正在工作,但 cors 标头(Allowed-Origin)中有错误的值,因为设置中的变量没有转换为值。我没有得到关于不是属性的任何信息发现或类似的东西。我从 Web 服务获得 HTTP 403。我认为所有相关信息都在我的帖子顶部。您需要什么有关配置/使用的信息?!谢谢!
  • 但是当我在 spring-config 中直接添加没有属性和端口的 IP 地址时,cors 将起作用 -> 当我设置这个时:allowed-origins="192.168.1.200" 它可以工作没有港口。这就是为什么我认为这不是 cors 值的问题。是设置本身的问题?!但我尝试添加端口并没有改变。
  • 是的,我确定。在另一个控制器中我测试了这个:@Value("${test}") String Test; System.out.println(Test);我从属性文件中获得了正确的值。我使用 jetty maven 插件启动服务。
  • 使用 Spring Boot 2.0.2.RELEASE 这个解决方案有效:@CrossOrigin(origins = {"${settings.cors_origin}"})。但是,使用 2.0.4.RELEASE 它不再存在,关于如何让它工作的任何建议?目前,该字符串不再转换为配置值,而是在运行时保持为${settings.cors_origin}...
【解决方案2】:

您可以尝试直接在 origins 参数中访问该属性

@CrossOrigin(origins = @Value("${settings.cors_origin}"))

【讨论】:

猜你喜欢
  • 2016-10-18
  • 2013-12-20
  • 2019-09-18
  • 1970-01-01
  • 2020-08-27
  • 1970-01-01
  • 2014-08-09
  • 1970-01-01
  • 2016-04-05
相关资源
最近更新 更多