2015-05-27 2 views
2

Предположим, у меня есть MVC контроллер Spring, как показано ниже:Отключение конечных точек контроллера с использованием Spring

@Controller 
public class MyController { 

    @RequestMapping(value = "/doSomething", method = RequestMethod.POST) 
    public @ResponseBody JSONObject doSomething() { 
    //... 
    } 

    @RequestMapping(value = "/doOtherThing", method = RequestMethod.POST) 
    public @ResponseBody JSONObject doOtherThing() { 
    //... 
    } 
} 

Есть ли способ, с помощью Spring XML-файлы оу некоторые другие настройки, чтобы отключить только одну конечную точку этого контроллера? Например, отключить/doSomething и сохранить/doOtherThing включен?

Причина, по которой я прошу, состоит в том, что мне нужно добавить две разные версии компонента (jar), в которой есть контроллер с несколькими конечными точками, но мне нужно отключить doSomething в jar 1.0 и использовать doSomething на jar 2.0.

+1

Отключить и сделать что? Если они нажмут '/ doSomething', верните 404? –

+0

Что именно вы хотите, чтобы Spring делал, когда сообщения клиентов используют 'doSomething()'? –

+0

Вы можете создать перехватчик и проверить URL-адрес и вывести ошибку (404 ??) условно. Но любопытно узнать, почему вы хотите отключить конечную точку? –

ответ

0

вы можете использовать фильтр ... настроить объект, где каждый экземпляр является ограниченным отображением, присутствующим в контроллерах .. теперь говорят, что вы хотите предотвратить «www.someaddress.com/yourapp/finalMapping», добавить объект типа DisabledUrl с полем id, являющимся полным отображением. Определите репозиторий или среднее для вас, чтобы опросить такую ​​таблицу, и lo 'и вот, вы можете во время выполнения ограничить доступ к ресурсу .. лучшим способом было бы сохранить в eh-кеше список «отключенных» сопоставлений и избежать запросов базу данных для каждого запроса, но предположим, что эта работа является грубым решением.

  @Component(value = "yourNiceFilter") 
      public class YourNiceFilter extends OncePerRequestFilter{ 

      @Autowired 
      private DisabledUrlRepository disabledUrlRepository; 

       private static final Logger logger = LoggerFactory.getLogger(YourNiceFilter.class); 

       @Override 
       protected void doFilterInternal(HttpServletRequest request, 
         HttpServletResponse response, FilterChain filterChain) 
           throws ServletException, IOException { 
        //String[] path = request.getRequestURL().toString().split("/"); 

           if (letPagePass(request.getRequestURL().toString()) == false) 
           { 
            response.sendRedirect(request.getContextPath()+"/your/courtesy/page/requestMapper"); 
            return; 
           } 
        filterChain.doFilter(request, response); 

       } 

       public boolean letPagePass(String url) 
       { 
       String mappedPage = null; 
       //do something and extract the identifier of the "mapping" 
       if (mappedPage != null) 
       { 
        if (disabledUrlRepository.findOne(mappedPage) != null); 
        { 
        return false; 
        } 
       } 
       return true; 
       } 
Смежные вопросы