SpringFramework3.0: Как создать перехватчики, которые применяются только к запросам, которые сопоставляются с определенными контроллерами?

В простейшей форме мне нужен перехватчик, который проверяет данные сеанса, чтобы увидеть, вошел ли пользователь в систему, и, если нет, перенаправляет их на страницу входа. Очевидно, я бы не хотел, чтобы этот перехватчик использовался, скажем, на странице приветствия или на самой странице входа.

Я видел дизайн, в котором используется список каждого URL-адреса для одного из двух перехватчиков, один из которых ничего не делает, а другой является фактическим перехватчиком, который вы хотите реализовать, но этот дизайн кажется очень неуклюжим и ограничивает простоту расширяемости приложения. Для меня имеет смысл, что должен быть способ использования перехватчиков на основе аннотаций, но, похоже, этого не существует.

У моего друга есть идея фактически изменить класс обработчика, чтобы во время каждого запроса он проверял контроллер, на который он сопоставляет запрос, для новой аннотации, которую мы создадим (например, @Interceptor("loginInterceptor") ).

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

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


person fusion2004    schedule 22.04.2010    source источник


Ответы (3)


Используйте Spring Security.

person anger    schedule 28.04.2010
comment
Похоже, вы пытаетесь изобрести велосипед здесь. как рекомендует Барт, попробуйте внедрить Spring Security, я считаю, что вы можете охватить то, что вы пытаетесь сделать, с помощью самой базовой автоматической настройки безопасности и пары аннотаций @Secure. - person Chepech; 02.11.2010


Как насчет фильтра сервлетов для всех запросов, которые отправляют пользователя на страницу входа, если объект пользователя не находится в сеансе? Во второй части вы можете использовать аннотации безопасности для методов контроллера, которые могут проверять роль пользователя.

person Robby Pond    schedule 27.04.2010