Как перенаправить на простую страницу? - PullRequest
0 голосов
/ 10 мая 2018

Я использую Spring Security, и у меня большая проблема.

После того, как пользователь войдет в систему и закроет страницу, когда он снова войдет в «mysite.com», его следует перенаправить на «/ dashboard», но вместо этого он получит ошибку 404, страница не найдена.

Единственный способ для него снова войти в систему - это использовать другой браузер или сервер.

Что не так с моим конфигом ?? Он не перенаправляет на / dashboard, если он уже вошел в систему.

  @Override
protected void configure(HttpSecurity http) throws Exception {

    http.authorizeRequests()
            .antMatchers("/settings", "/users", "/teams", "/docker-status", "/container-creation").hasAuthority("Administrator")
            .anyRequest().authenticated()
            .and()
            .formLogin().permitAll()
                .loginPage("/login").permitAll()
                .defaultSuccessUrl("/dashboard")
                .failureUrl("/login?error")
                .successHandler(authenticationSuccessHandler)
            .and()
            .logout()
                .logoutUrl("/logout")
                .logoutSuccessUrl("/login")
                .logoutSuccessHandler(logoutSuccessHandler)
            .and()
            .exceptionHandling().accessDeniedHandler(accessDeniedHandler);
}

1 Ответ

0 голосов
/ 10 мая 2018

Форма и основные параметры входа

Вам может быть интересно, откуда взялась форма входа, когда вам предложили войти в систему, поскольку мы не упомянули ни HTML-файлы, ни JSP. Фактически, поскольку мы не указали явно URL-адрес для страницы входа в систему, Spring Security генерирует его автоматически на основе включенных функций и использования стандартных значений для URL-адреса, который обрабатывает отправленное имя входа, целевой URL-адрес по умолчанию, который будет использовать пользователь. быть отправлено после входа в систему и так далее. Тем не менее, пространство имен предлагает много поддержки, чтобы позволить вам настроить эти параметры. Например, если вы хотите указать собственную страницу входа, вы можете использовать:

<http>
<intercept-url pattern="/login.jsp*" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<intercept-url pattern="/**" access="ROLE_USER" />
<form-login login-page='/login.jsp'/>
</http>

Также обратите внимание, что мы добавили дополнительный элемент intercept-url , чтобы сообщить, что любые запросы на страницу входа должны быть доступны для анонимных пользователей [3], а также класс AuthenticatedVoter для получения более подробной информации о том, как значение IS_AUTHENTICATED_ANONYMOUSLY обрабатывается.]. В противном случае запрос будет соответствовать шаблону / **, и сам доступ к странице входа в систему будет невозможен! Это распространенная ошибка конфигурации, которая приводит к бесконечному циклу в приложении. Spring Security выдаст предупреждение в журнале, если ваша страница входа будет защищена. Также можно сделать так, чтобы все запросы, соответствующие конкретному шаблону, полностью обходили цепочку фильтров безопасности, определяя отдельный элемент http для шаблона следующим образом:

<http pattern="/css/**" security="none"/>
<http pattern="/login.jsp*" security="none"/>

<http use-expressions="false">
<intercept-url pattern="/**" access="ROLE_USER" />
<form-login login-page='/login.jsp'/>
</http>

В Spring Security 3.1 теперь можно использовать несколько элементов http для определения отдельных конфигураций цепочки фильтров безопасности для разных шаблонов запросов. Если атрибут pattern отсутствует в элементе http, он соответствует всем запросам. Создание незащищенного шаблона - простой пример этого синтаксиса, где шаблон отображается в пустую цепочку фильтров [4]. Мы рассмотрим этот новый синтаксис более подробно в главе о цепочке фильтров безопасности.

Важно понимать, что эти незащищенные запросы будут полностью игнорировать любую веб-конфигурацию Spring Security или дополнительные атрибуты, такие как require-channel, поэтому вы не сможете получить доступ к информации о текущем пользователе или вызвать защищенные методы во время запрос. Используйте access = 'IS_AUTHENTICATED_ANONYMOUSLY' в качестве альтернативы, если вы все еще хотите применить цепочку фильтров безопасности.

Если вы хотите использовать обычную аутентификацию вместо формы входа, измените конфигурацию на

<http use-expressions="false">
<intercept-url pattern="/**" access="ROLE_USER" />
<http-basic />
</http>

Обычная аутентификация будет иметь приоритет и будет использоваться для запроса входа в систему, когда пользователь пытается получить доступ к защищенному ресурсу. Форма входа по-прежнему доступна в этой конфигурации, если вы хотите использовать ее, например, через форму входа, встроенную в другую веб-страницу.

Установка пункта назначения после входа в систему по умолчанию

Если при входе в форму не запрашивается попытка доступа к защищенному ресурсу, в игру вступает опция default-target-url . Это URL-адрес, по которому пользователь будет принят после успешного входа в систему, и по умолчанию используется значение «/». Вы также можете настроить все так, чтобы пользователь всегда попадал на эту страницу (независимо от того, был ли вход в систему «по требованию» или он явно выбрал вход в систему), установив атрибут Always-use-default-target в «true» , Это полезно, если ваше приложение всегда требует, чтобы пользователь запускал «домашнюю» страницу, например:

<http pattern="/login.htm*" security="none"/>
<http use-expressions="false">
<intercept-url pattern='/**' access='ROLE_USER' />
<form-login login-page='/login.htm' default-target-url='/home.htm'
        always-use-default-target='true' />
</http>

Для еще большего контроля над пунктом назначения вы можете использовать атрибут authentication-success-handler-ref в качестве альтернативы default-target-url . Указанный компонент должен быть экземпляром AuthenticationSuccessHandler. Подробнее об этом вы узнаете в главе «Основные фильтры», а также в приложении к пространству имен, а также о том, как настроить поток в случае сбоя аутентификации.

Справочные документы Spring Security

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...