2017-10-19 91 views
-1

我在课堂上有一个注释@SecurityDomain("cjm")。根据我部署应用程序的环境,我需要配置不同的安全域。所以我的想法是使用过滤:@SecurityDomain("${project.name}")如何用maven属性替换Java注释值?

但是,使用我在SO上找到的例子,没有任何工作。我根本不能取代财产

这似乎很奇怪我还没有找到一个很好的解决方案。可能我正在用错误的术语进行搜索。或者,也许,很奇怪,它(仍然)是不可能的。

maven模板插件是不够的,它不包含过滤器,所以我有很多重复类编译错误。

该项目是一个Java EE项目,使用keycloak saml安全适配器在Red Hat EAP 7上运行。 @SecurityDomain必须将安全性上下文从Web上下文传播到ejb上下文。使用@RolesAllowed时这是必需的。我向keycloak团队记录了一个增强请求,以自动传播安全上下文,就像在默认场景中所做的那样。

+1

您是否考虑过使用Spring配置?这里的文档: [Spring Externalized Configuration documentation](https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html) –

+1

你似乎在说话关于“过滤”源代码听起来很奇怪的想法。你不介意把安全域放入属性文件吗?但是,有一个插件https://stackoverflow.com/questions/4106171/filtering-source-code-in-maven –

+0

如何使用属性与@Value($ {securityDomain})私人字符串securityDomain并注入此值@SecurityDomain(securityDomain) –

回答

-1

在任何Maven构建阶段,您都可以玩弄设置环境变量,具体取决于您的配置文件。然后使用System.environment()在运行时阶段使用它们。

在现代Docker容器风格方面,它应该是一个更好的方式

+0

是的,但maven在源代码中默认情况下不允许它。尽管如此,它完全适用于资源文件。这个技巧需要在编译过程之前进行。 –

+0

为什么在编译之前?您将其定义为“根据我部署应用程序的环境,我需要配置不同的安全域。” - 这是部署阶段,但不是我认为的编译。 – AlexGera

+0

我了解你的观点。但是,当Maven将.java文件编译为.class文件时,该属性需要设置。如果不是,Maven不能在.class文件上设置属性。它需要在.java文件中完成。所以它只能发生在编译过程之前(或Maven喜欢调用它的阶段) –