Adición de RequestCondition personalizado en Spring mvc 3.1

Tengo una aplicación Spring mvc (3.1.1) y quiero definir condiciones más allá de lo que está disponible en RequestMapping. Tengo un par de cosas para las que quiero usar.

Primero, sería bueno si pudiera mostrar una página de inicio diferente para diferentes tipos de usuarios:

<code>@Controller
public class HomepageController {

    @RequestMapping(value = "/")
    @CustomCondition(roles = Guest.class)
    public String guestHome() { /*...*/ }

    @RequestMapping(value = "/")
    @CustomCondition(roles = Admin.class)
    public String adminHome() { /*...*/ }

}
</code>

En segundo lugar, quiero que la aplicación funcione como un sitio web y como un servicio REST (por ejemplo, para aplicaciones móviles), por lo que me gustaría permitir que el sitio web acceda a las acciones html y json, y que solo el servicio (subdominio diferente) Acceder a las acciones de json (algún tipo de@CustomCondition(web = true) que solo coincide con las URL del sitio web)

¿Puede esto funcionar para cualquiera de los dos usos que estoy planeando?

Encontré muy poca documentación sobre condiciones personalizadas, pero encontréun ejemplo eseimplementa condiciones personalizadas que podría ser lo que quiero, pero usa un@Configuration Clase en lugar de la configuración XML que estoy usando y no quiero mover todas mis definiciones xml de Spring a una@Configuration clase.

¿Puedo definir un customMethodCondition paraRequestMappingHandlerMapping en el XML?

Intenté subclasificarRequestMappingHandlerMapping y anulargetCustomMethodCondition, para devolver mi costumbreRequestCondition, pero no funcionó -getMatchingCondition() En mi condición no se disparó.

Cualquier ayuda sería muy apreciada!

ACTUALIZAR

Leí un poco más, y parece queRequestMappingHandlerMapping Es una nueva clase (desde la versión 3.1).

Lo que sucede en mi aplicación es que la @Configuración que intenta anular y, por lo tanto, redefinir larequestMappingHandlerMapping frijol realmente funciona, pero las asignaciones de url (@RequestMapping métodos en@Controllers) parecenser procesado dos veces, una vez por la subclaseExtendedRequestMappingHandlerMapping y una vez por el originalRequestMappingHandlerMapping - Primero con una condición personalizada, y luego otra vez sin ella.

La conclusión es que mis condiciones personalizadas son simplemente ignoradas.

Se supone que este es un patrón avanzado, pero en mi opinión debería ser bastante común ...

Comentarios a alguien?

Respuestas a la pregunta(2)

Su respuesta a la pregunta