следующий сценарий:
Я разработал микросервисную архитектуру с помощью Spring. Для этого я реализовал один сервис аутентификации и один сервис пользовательского интерфейса.
Сессия используется совместно с Redis. Итак, трудоемкость заключается в том, что вы входите на страницу авторизации и после успеха вы перенаправляетесь на ресурс пользовательского интерфейса.
Все идет нормально. Я также реализовал авторизацию по ролям пользователей для защиты моих ресурсов на уровне контроллера.
Что я хочу:
Даже если вход был успешным, изменить URL-адрес и войти в зону с ограниченным доступом невозможно. Поэтому, когда клиент пытается сделать это, возникает исключение Accessdenied.
В этом случае я хочу аннулировать сеанс и перенаправить на страницу входа в систему службы аутентификации.
Что я сделал:
Я следовал этому руководству baeldung для реализации пользовательского обработчика доступа с правами доступа.
Код:
CustomAccessDeniedHandler.java
public class CustomAccessDeniedHandler implements AccessDeniedHandler {
@Override
public void handle(HttpServletRequest request, HttpServletResponse response,
AccessDeniedException accessDeniedException) throws IOException, ServletException {
response.sendRedirect("http://localhost:8000/login");
}
}
SpringSecurity.java
@Configuration
public class SpringSecurityConfiguration extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated();
http.exceptionHandling().accessDeniedHandler(accessDeniedHandler());
}
@Bean
public AccessDeniedHandler accessDeniedHandler(){
return new CustomAccessDeniedHandler();
}
}
Что происходит:
Я установил точку останова в своем обработчике, но он не генерируется, и генерируется общее сообщение о доступе. Что-то я забыл зарегистрировать в реализации?
Спасибо, ребята