2017-10-19 70 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喜歡調用它的階段) –