Spring 3.x - как мне перенаправить из сопоставления, которое возвращает данные? - PullRequest
8 голосов
/ 22 января 2012

У меня в контроллере есть такой метод:

@RequestMapping(value="getData", method=RequestMethod.GET)
@ResponseBody
public List<MyDataObj> getData()
{
  return myService.getData();
}

Данные возвращаются как JSON или xsl, в зависимости от запроса.

Если лицо, делающее запрос, не авторизовано для доступа к данным, мне нужно перенаправить пользователя на страницу "не авторизован", поэтому что-то вроде этого:

@RequestMapping(value="getData", method=RequestMethod.GET)
@ResponseBody
public List<MyDataObj> getData()
{
  if (!isAuthorized())
  {
    // redirect to notAuthorized.jsp
  }
  return myService.getData();
}

Все примеры, которые я видел с помощью Spring, требуют, чтобы метод возвращал либо String, либо ModelAndView. Я думал об использовании HttpServletResponse.sendRedirect(), но все мои JSP находятся под WEB-INF и не могут быть доступны напрямую.

Как можно изящно запретить доступ к URL-адресу запроса данных?

Ответы [ 4 ]

5 голосов
/ 22 января 2012

Более элегантным решением может быть для использования HandlerInterceptor, который будет проверять авторизацию, блокируя любые запросы, которые не разрешены для продолжения.Если запрос затем достигает вашего контроллера, вы можете считать, что все в порядке.

4 голосов
/ 11 декабря 2014

Ответ ниже.Но ваш конкретный случай лучше рассматривать с другим подходом.

@RequestMapping(value = "/someUrl", method = RequestMethod.GET)
@ResponseBody
public Response someMethod(String someData, HttpServletResponse response){
    if(someData=="redirectMe"){
       response.sendRedirect(ppPageUrl);
    }
 ...
}
1 голос
/ 22 января 2012

Другой подход - фильтр. Вы можете переместить всю логику безопасности в фильтр и сохранить чистый код в контроллерах.

0 голосов
/ 22 января 2012

Довольно просто:

Отправить клиенту статус ошибки

response.setStatus(HttpServletResponse.SC_NO_CONTENT);

и обрабатывать то же самое с вами обработчиком обратного вызова ajax и перенаправлением. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...