В моем приложении есть страница настроек.
Это должен настраивать только администратор, поэтому я заблокировал страницу от обычного участника.
<security:authorize access = "hasAuthority('Administrator')">
<li id = "settings">
<a href = "/settings">
<img src = "../resources/img/icons/10.png" alt = "" class = "menuIcon">
<span class = "menu-title">Settings</span>
</a>
</li>
</security:authorize>
Это работает хорошо. Пользователь не видит страницу. Проблема в том, что если он обращается к /settings, он может видеть страницу без проблем.
Я хочу вместо этого показать ему запрещенную страницу. есть идеи как это сделать? Спасибо




Безопасность Spring позволяет вам расширить org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter, который вы можете использовать с весенней загрузкой следующим образом:
например
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(final HttpSecurity http) throws Exception {
http
.authorizeRequests()
.mvcMatchers("/settings").hasAuthority("Administrator");
}
}
Предполагая, что ваш принципал аутентифицируется и помещается в контекст безопасности spring, это должно вызвать обработчик отказа в доступе.
Вы можете настроить это следующим образом:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(final HttpSecurity http) throws Exception {
http
.authorizeRequests()
.mvcMatchers("/settings").hasAuthority("Administrator").and()
.exceptionHandling()
.accessDeniedPage(...)
.accessDeniedHandler(...)
}
}
Где вы можете настроить страницу с отказом в доступе или настраиваемый обработчик.
Я подозреваю, что обработчик не может найти отображение сервлета для /errors/error403. Если вы перейдете к этому URI прямо в браузере, это сработает? Это может помочь увидеть структуру каталогов вашего проекта.
он работает, но выдает ошибку 404 для Участника. Должна быть ошибка 403. Мой код:
.exceptionHandling().accessDeniedPage("/errors/error403")