Adicionando RequestCondition customizado no Spring mvc 3.1
Eu tenho um aplicativo Spring mvc (3.1.1), e eu quero definir condições além do que está disponível no RequestMapping. Eu tenho algumas coisas que eu quero usar.
Primeiro, seria bom se eu pudesse mostrar uma home page diferente para diferentes tipos de usuários:
<code>@Controller public class HomepageController { @RequestMapping(value = "/") @CustomCondition(roles = Guest.class) public String guestHome() { /*...*/ } @RequestMapping(value = "/") @CustomCondition(roles = Admin.class) public String adminHome() { /*...*/ } } </code>
Segundo, eu quero que o aplicativo funcione como um site e como um serviço REST (por exemplo, para aplicativos móveis), então eu quero deixar o site acessar as ações html e json, e deixar o serviço (subdomínio diferente) somente acesse ações de json (algum tipo de@CustomCondition(web = true)
que corresponde apenas aos URLs do site)
Isso pode funcionar para qualquer um dos dois usos que estou planejando?
Eu encontrei muito pouca documentação sobre condições personalizadas, mas acheium exemplo naquelaimplementa condições personalizadas que pode ser o que eu quero, mas usa um@Configuration
classe em vez da configuração XML que estou usando e eu não quero mover toda a minha definição xml primavera para um@Configuration
classe.
Posso definir um customMethodCondition paraRequestMappingHandlerMapping
no XML?
Eu tentei subclassingRequestMappingHandlerMapping
e anulargetCustomMethodCondition
, para devolver meu costumeRequestCondition
, mas não funcionou -getMatchingCondition()
na minha condição não disparou.
Qualquer ajuda seria muito apreciada!
ATUALIZAR
Eu li um pouco mais, e pareceRequestMappingHandlerMapping
é uma nova classe (desde a versão 3.1).
O que acontece no meu aplicativo é que o @Configuration que tenta substituir e, assim, redefinir orequestMappingHandlerMapping
bean realmente funciona, mas os mapeamentos de url (@RequestMapping
métodos em@Controller
s) parecemseja processado duas vezes, uma vez pela subclasseExtendedRequestMappingHandlerMapping
e uma vez pelo originalRequestMappingHandlerMapping
- primeiro com uma condição personalizada e, novamente, sem ela.
Bottom line é minhas condições personalizadas são simplesmente ignoradas.
Este é suposto ser um padrão avançado, mas IMO deve ser bastante comum ...
Comentários alguém?