Вы можете сделать перенаправление в обработчике отказа доступа.
Обычно вы будете иметь что-то подобное в вашей конфигурации:
<http ..... >
...
<intercept-url method="GET" pattern="/groups" access="hasRole('VIEW_GROUPS')" />
<intercept-url method="GET" pattern="/admin" access="hasRole('VIEW_ADMIN')" />
...
<access-denied-handler error-page="/access-denied" />
</http>
URL/отказе в доступе, как правило, отображает доступ запрещен страницу. Вы можете зарегистрировать контроллер для этого URL-адреса, а затем вы можете проверить контроллер, если у пользователя есть роль «VIEW_ADMIN» и перенаправить его туда. Если вам нужно знать, какой пользователь URL попытался посетить, он должен быть доступен в объекте HttpServletRequest.
EDIT: решение с помощью перехватчика:
Вы можете создать перехватчик Spring MVC. Расширьте HandlerInterceptorAdapter и в методе preHandle проверьте, проверен ли пользователь, проверьте роли и выполните перенаправление.
class MyRoleBasedRedirectorInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//do the authentication/role/URL checks
...
if (needsAdminRedirect) {
response.sendRedirect("admin");
return false;
}
return true;
}
}
И в конфигурации:
<mvc:interceptors>
<bean class="com.example.MyRoleBasedRedirectorInterceptor" />
</mvc:interceptors>
Если вам не нравится оригинальное решение контроллера вы также можете реализовать свою собственную реализацию AccessDeniedHandler и к проверкам там. Вы бы подключить вашу реализацию с
<access-denied-handler ref="com.example.MyAccessDeniedHandler" />
Я бы по-прежнему выбираю для решения Controller/AccessDeniedHandler так, если я правильно понял, перенаправление происходит только тогда, когда пользователь не авторизован посетить страницу «Группу».
Является ли пользователь, который «не имеет роли для просмотра/группы страниц» уже аутентифицирован? – Ralph
Да, этот пользователь аутентифицируется с использованием собственного поставщика проверки подлинности. – umar