Hinzufügen von benutzerdefinierten RequestCondition's in Spring MVC 3.1
Ich habe eine Spring mvc (3.1.1) App und möchte Bedingungen definieren, die über die in RequestMapping verfügbaren Bedingungen hinausgehen. Ich habe ein paar Dinge, für die ich es verwenden möchte.
Zunächst wäre es schön, wenn ich für verschiedene Nutzertypen eine andere Homepage anzeigen könnte:
<code>@Controller public class HomepageController { @RequestMapping(value = "/") @CustomCondition(roles = Guest.class) public String guestHome() { /*...*/ } @RequestMapping(value = "/") @CustomCondition(roles = Admin.class) public String adminHome() { /*...*/ } } </code>
Zweitens möchte ich, dass die App sowohl als Website als auch als REST-Service (z. B. für mobile Apps) fungiert. Daher möchte ich, dass die Website auf HTML- und JSON-Aktionen zugreift und nur den Service (andere Unterdomäne) Zugriff auf JSON - Aktionen (irgendeine Art von@CustomCondition(web = true)
welches nur mit Website-URLs übereinstimmt)
Kann dies für eine der beiden von mir geplanten Anwendungen funktionieren?
Ich habe sehr wenig Dokumentation über benutzerdefinierte Bedingungen gefunden, aber ich habe gefundenein Beispiel Dasimplementiert benutzerdefinierte Bedingungen Das könnte sein, was ich will, aber es verwendet eine@Configuration
Klasse anstelle der XML-Konfiguration, die ich verwende, und ich möchte nicht meine gesamten Spring-XML-Definitionen nach a verschieben@Configuration
Klasse.
Kann ich eine customMethodCondition für definieren?RequestMappingHandlerMapping
in der XML?
Ich habe versucht, Unterklassen zu bildenRequestMappingHandlerMapping
und überschreibengetCustomMethodCondition
, um meinen Brauch zurückzugebenRequestCondition
, aber es hat nicht funktioniert -getMatchingCondition()
in meinem Zustand hat nicht geschossen.
Jede Hilfe wäre sehr dankbar!
AKTUALISIEREN
Ich habe ein bisschen mehr gelesen und es sieht so ausRequestMappingHandlerMapping
ist eine neue Klasse (seit Version 3.1).
Was in meiner App passiert, ist, dass die @Konfiguration versucht, die zu überschreiben und dadurch neu zu definierenrequestMappingHandlerMapping
Bean funktioniert tatsächlich, aber die URL-Zuordnungen (@RequestMapping
Methoden in@Controller
s) scheinen zuzweimal bearbeitet werdeneinmal von der UnterklasseExtendedRequestMappingHandlerMapping
und einmal vom OriginalRequestMappingHandlerMapping
- zuerst mit einer benutzerdefinierten Bedingung und dann wieder ohne.
Unterm Strich werden meine benutzerdefinierten Bedingungen einfach ignoriert.
Dies sollte ein fortgeschrittenes Muster sein, aber IMO sollte es durchaus üblich sein ...
Kommentare jemand?