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@Controllers) 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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage