Добавление пользовательских RequestCondition в Spring mvc 3.1
У меня есть приложение Spring mvc (3.1.1), и я хочу определить условия, выходящие за рамки того, что доступно в RequestMapping. У меня есть пара вещей, для которых я хочу использовать это.
Во-первых, было бы неплохо, если бы я мог показать другую домашнюю страницу для разных типов пользователей:
<code>@Controller public class HomepageController { @RequestMapping(value = "/") @CustomCondition(roles = Guest.class) public String guestHome() { /*...*/ } @RequestMapping(value = "/") @CustomCondition(roles = Admin.class) public String adminHome() { /*...*/ } } </code>
Во-вторых, я хочу, чтобы приложение функционировало как веб-сайт и как служба REST (например, для мобильных приложений), поэтому я хочу, чтобы веб-сайт имел доступ как к действиям html, так и к json, и разрешил только службе (другому поддомену) Доступ к действиям JSON (какой-то@CustomCondition(web = true)
который соответствует только URL сайта)
Может ли это работать для любого из двух видов использования, которые я планирую?
Я нашел очень мало документации о пользовательских условиях, но я нашелодин пример тотреализует пользовательские условия что может быть то, что я хочу, но он использует@Configuration
класс вместо конфигурации XML, которую я использую, и я не хочу перемещать все мои определения Spring XML в@Configuration
учебный класс.
Могу ли я определить customMethodCondition дляRequestMappingHandlerMapping
в XML?
Я пробовал создавать подклассыRequestMappingHandlerMapping
и переопределитьgetCustomMethodCondition
, чтобы вернуть мой обычайRequestCondition
, но это не сработало -getMatchingCondition()
в моем состоянии не стрелял.
Любая помощь будет принята с благодарностью!
UPDATE
Я читаю немного больше, и это выглядит какRequestMappingHandlerMapping
это новый класс (начиная с версии 3.1).
В моем приложении происходит то, что @Configuration пытается переопределить и, таким образом, переопределитьrequestMappingHandlerMapping
бин на самом деле работает, но отображение URL (@RequestMapping
методы в@Controller
s) кажетсяget processed twiceоднажды подклассомExtendedRequestMappingHandlerMapping
и однажды по оригиналуRequestMappingHandlerMapping
- сначала с пользовательским условием, а затем снова без него.
Суть в том, что мои пользовательские условия просто игнорируются.
Предполагается, что это продвинутая модель, но IMO должна быть довольно распространенной ...
Комментарии кто-нибудь?