2017-10-19 1 views
-1

Ich habe eine Anmerkung @SecurityDomain("cjm") auf einer Klasse. Abhängig von der Umgebung, in der ich die Anwendung implementiere, muss ich verschiedene Sicherheitsdomänen konfigurieren. Also meine Idee war, Filterung zu verwenden: @SecurityDomain("${project.name}").Wie Java Annotation-Wert durch Maven-Eigenschaft zu ersetzen?

Mit den Beispielen, die ich auf SO gefunden habe, funktioniert nichts. Ich kann die Eigenschaft einfach nicht ersetzen

Es scheint komisch, ich habe keine schöne Lösung dafür gefunden. Wahrscheinlich suche ich mit der falschen Terminologie. Oder vielleicht, komischerweise genug, ist es (immer noch) nicht möglich.

Das Maven Vorlage-Plugin ist nicht ausreichend, es enthält keinen Filter, also habe ich viele doppelte Klassenkompilierungsfehler.

Bei dem Projekt handelt es sich um ein Java EE-Projekt, das auf Red Hat EAP 7 unter Verwendung des Sicherheitsschlüssels keycloak saml ausgeführt wird. Die @SecurityDomain muss den Sicherheitskontext aus dem Webkontext in den ejb-Kontext propagieren. Dies ist notwendig, wenn @RolesAllowed verwendet wird. Ich habe eine Verbesserungsanforderung an das keycloak-Team angemeldet, um den Sicherheitskontext automatisch weiterzugeben, wie in einem Standardszenario.

+1

Haben Sie in Betracht gezogen, Spring-Konfiguration? Hier ist die Dokumentation: [Spring Externalized Configuration Dokumentation] (https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html) –

+1

Sie scheinen zu reden über "filtern" Quellcode, der als seltsame Idee klingt. Macht es Ihnen nichts aus, diese Sicherheitsdomäne in die Eigenschaftendatei zu stellen? Allerdings gibt es ein Plugin https://stackoverflow.com/questions/4106171/filtering-source-code-in-maven –

+0

Wie wäre es mit einer Eigenschaft mit @Value ($ {securityDomain}) private String securityDomain und injizieren Sie diesen Wert in @SecurityDomain (Sicherheitsdomäne) –

Antwort

-1

Sie könnten herumspielen, um Umgebungsvariablen während irgendeiner Maven-Bauphase einzurichten, hängt zum Beispiel von Ihren Profilen ab. Und dann verbrauchen sie sie auf der Laufzeit mit System.environment().

In Bezug auf die moderne Docker Container Stil der Lieferung sollte es eine bevorzugte Möglichkeit auch sein

+0

True, aber Maven lässt es standardmäßig nicht im Quellcode zu. Es ist jedoch perfekt auf Ressourcendateien anwendbar. Der Trick hier muss vor dem Kompilieren geschehen. –

+0

Warum vor dem Kompilieren? Sie definieren es als "Abhängig von der Umgebung, in der ich die Anwendung bereitstellen, muss ich verschiedene Sicherheitsdomänen konfigurieren." - Das ist die Bereitstellungsphase, aber meiner Meinung nach nicht kompilieren. – AlexGera

+0

Ich verstehe Ihre Sichtweise. Wenn Maven jedoch die .java-Datei in eine .class-Datei kompiliert, muss die Eigenschaft bereits festgelegt werden. Wenn nicht, kann Maven keine Eigenschaften für .class-Dateien festlegen. Es muss in der .java-Datei durchgeführt werden. So kann es nur vor dem Kompilierungsprozess passieren (oder Phase, wie Maven es gerne nennt) –

Verwandte Themen