Блокировать доступ пользователей через URL

В моем приложении есть страница настроек.

Это должен настраивать только администратор, поэтому я заблокировал страницу от обычного участника.

  <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, он может видеть страницу без проблем.

Я хочу вместо этого показать ему запрещенную страницу. есть идеи как это сделать? Спасибо

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Безопасность 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(...)

    }
}

Где вы можете настроить страницу с отказом в доступе или настраиваемый обработчик.

он работает, но выдает ошибку 404 для Участника. Должна быть ошибка 403. Мой код: .exceptionHandling().accessDeniedPage("/errors/error403")

user9729328 08.05.2018 11:36

Я подозреваю, что обработчик не может найти отображение сервлета для /errors/error403. Если вы перейдете к этому URI прямо в браузере, это сработает? Это может помочь увидеть структуру каталогов вашего проекта.

David 08.05.2018 12:15

Другие вопросы по теме