2012-05-25 4 views
1

У меня есть Spring MVC-Controller, который генерирует некоторый вид Byte-Response, который непосредственно записывается в Response-Outputstream. Для этого случая мне нужен контроллер с этой подписьюResponseBody весной MVC

@BodyResponse 
@AuthorizedMethod(...) 
public void createPdf() { 
    // doSomething on response 
} 

Но когда пользователь не авторизован, я хочу показать ему форму входа. Поэтому мне нужен такой метод подписи

@AuthorizedMethod(...) 
public ModelAndView createPdf() { 
    return new ModelAndView("login.jsp"); 
} 

Как я могу справиться с этим?

С уважением, Майкл

+1

Вы используете Spring Security? Если это так, фильтр Spring Security перенаправляет неавторизованного пользователя до того, как обработка даже достигнет вашего контроллера. –

+0

нет, не используя весенний mvc, я хочу объявить аспекты безопасности непосредственно при помощи методов (=> контроллер), которые защищены, а не в некоторой конфигурации – mibutec

ответ

2

Для конкретного случая проверки безопасности, как правило, система безопасности будет обрабатывать делать редирект там автоматически, если вы не делаете, как своего рода «обновления» входа в систему.

В общем случае вашего вопроса: В HandlerAdapter есть специальная ловушка, которая отключает разрешение просмотра, если вы читаете в ответе и возвращаете значение null для ModelAndView.

Это означает, что если вы просто возьмете HttpServletResponse в качестве параметра метода и напишите сами байты, то верните нуль, Spring не предпримет никаких дальнейших действий и не примет ответ.

Тогда в случае, когда вы не хотите писать байты и вместо этого хотите вернуть представление, просто верните ModelAndView как обычно.

+0

отлично работает, спасибо – mibutec

Смежные вопросы