Вопросы сугубо, а так можно сделать, а как?
Подключенные спринги 3.1.2.RELEASE
Доступ ко всем страницам <intercept-url pattern="/**" access="hasRole('ROLE_USER')"/>
Пользователи:
<user name="1" password="1" authorities="ROLE_USER"/>
<user name="2" password="2" authorities="ROLE_USER, ROLE_LOCAL_ADMIN"/>
<user name="3" password="3" authorities="ROLE_USER, ROLE_LOCAL_ADMIN, ROLE_ADMIN"/>
И контроллер:
@RequestMapping(value = "/second")
public ModelAndView indexPage(Principal user) {
ModelAndView modelAndView = new ModelAndView("secondPage");
modelAndView.addObject("methodMessage", testMsg.Message(user));
return modelAndView;
}
testMsg.Message(user) защищен @Secured(value = "ROLE_ADMIN")
Авторизуюсь как ROLE_USER, пытаюсь зайти на страницы где будет отработан защищенный метод и перенаправляюсь на страницу авторизации:
<error-page>
<error-code>403</error-code>
<location>/login</location>
</error-page>
Можно ли эту ситуацию обработать как ни будь через контроллер?
Что бы я мог вывести сообщение на странице авторизации: "Вам нужно повысить права для доступа к ХХХХХХ странице". А потом, после авторизации редирект на ту страницу куда хотел попасть, ибо сейчас кидает на мой_сайт/.
UPD 1. Сообщения после редиректа на странице login можно делать с помощью RedirectAttributes. Осталось понять как прикрутить всё остальное.
В спринге есть AccessDeniedHandler, с помощью которого можете делать всё, что захотите:
@Component
public class CustomAccessDeniedHandler implements AccessDeniedHandler {
@Override
public void handle(HttpServletRequest request,
HttpServletResponse response,
AccessDeniedException e) throws IOException,
ServletException {
//...some code
// можете делать все, что захотите, например
response.sendRedirect("/403");
//...some code
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости