Die Dokumentation für Spring Security besagt, dass, um die Java Config verwenden können wir die AbstractSecurityWebApplicationInitializer
Klasse erweitern, die alle Nesesarry Beans für Spring Security eingerichtet werden, um zu arbeiten. Dieser Ansatz funktioniert einwandfrei, der Initialisierer wird automatisch ausgeführt und Spring Security wird beim Start der Anwendung ordnungsgemäß initialisiert.Spring Security - bedingte WebApplicationInitializer
Aber jetzt bin ich konfrontiert mit einem Szenario, wenn diese Initialisierung sollte abhängig von einer Systemeigenschaft sein. Daher möchte ich meine Initialisierer-Klasse nur dann einfügen, wenn eine Systemeigenschaft eingestellt ist (zum Beispiel: app.enablesecurity=true
) und diesen Initialisierer in keinem anderen Fall ausführt.
scheiterte ich mit jeder Lösung zu kommen für dieses Szenario, weil:
- In
AbstractSecurityWebApplicationInitializer
dieonStartup
Methode final markiert, so kann ich außer Kraft setzt es nicht und eine Bedingung hinzufügen - Wenn ich
AbstractSecurityWebApplicationInitializer
es nur verlängern ist immer automatisch von Spring abgeholt und instanziiert (oder zumindest Spring versucht, eine Instanz davon zu erstellen, kann es fehlschlagen), auch wenn ich es als eine private/innere/geschachtelte Klasse deklarieren.
So soweit ich weiß, die einzige Möglichkeit, bedingt dieses initializer einschließlich ist cglib/Javassist verwenden, um dynamisch eine Klasse zu erstellen, die AbstractSecurityWebApplicationInitializer
erstreckt.
Gibt es einen anderen Weg? Vielleicht gibt es eine Methode, die es mir erlaubt, meine Implementierung davor zu verbergen, von Spring aufgegriffen und zu einem späteren Zeitpunkt manuell ausgeführt zu werden?