Как реализовать страницу входа в систему с помощью безопасности Spring так, чтобы она работала с веб-потоком Spring?

У меня есть веб-приложение с помощью Spring 2.5.6 и безопасности Spring 2.0.4. Я реализовал рабочую страницу входа в систему, которая аутентифицирует пользователя против веб-сервиса. Аутентификация сделана путем определения пользовательского authentincation менеджера, как это:



    
    
    
    
    



    

Класс менеджера по аутентификации:


public class CustomAuthenticationManager implements AuthenticationManager, ApplicationContextAware {

    @Transactional
    @Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {

                //authentication logic

        return new UsernamePasswordAuthenticationToken(principal, authentication.getCredentials(),
                grantedAuthorityArray);
    }

Основная часть входа в систему jsp похожа на это:



${sessionScope["SPRING_SECURITY_LAST_EXCEPTION"].message}

Теперь проблема состоит в том, что приложение должно использовать веб-Поток Spring. После того, как приложение было настроено для использования веб-Потока Spring, вход в систему больше не работает - действие формы к результатам "/j_spring_security_check" на пустой странице без сообщения об ошибке. Что лучший способ состоит в том, чтобы адаптировать существующий процесс входа в систему так, чтобы он работал с веб-Потоком Spring?

Править: не было никакого сообщения об ошибке, просто пустая страница была отображена. Это работает теперь - проблема состояла в том, что web.xml пропускал записи



    springSecurityFilterChain
    org.springframework.web.filter.DelegatingFilterProxy



    springSecurityFilterChain
    /*

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

18
задан simon 28 May 2010 в 16:02
поделиться

4 ответа

Настроили ли вы свое приложение для использования Spring Web Flow в соответствии с главой Защита потоков в Справочном руководстве Spring Web Flow ?

0
ответ дан 30 November 2019 в 09:44
поделиться

Мне пришлось изменить имя моей формы с j_security_check на другое в Glassfish, поскольку, похоже, он сам интерпретирует этот URL.

0
ответ дан 30 November 2019 в 09:44
поделиться

Вот документация, описывающая, зачем нужен 'springSecurityFilterChain'.

Фильтр springSecurityFilterChain не создается явно, а создается неявно элементом spring security schema в контексте приложения

<http auto-config="false" session-fixation-protection="none">
    <form-login login-page="/login.jsp" default-target-url="/home.htm" />
</http>

Созданные бобы требуют провайдера аутентификации, поэтому мы предоставляем его

<authentication-provider>
   <user-service id="userDetailsService">
      <user password="password" name="username" authorities="ROLE_USER" />
   </user-service>
</authentication-provider

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

Эти подробности и обзор простого spring-security приложения приведены в A aimple web application with Spring Security - part 13.

Справочная документация описывает настройку springSecurityFilterChain как первую часть конфигурирования web.xml: Security Namespace Configuration - Getting Started. (Ссылка на версию 2.0.x, используемую ОП. Последняя версия 3.1 находится здесь.)

.
2
ответ дан 30 November 2019 в 09:44
поделиться

Из вашего кода неясно, есть ли у вас вообще конфигурация Spring Security. Я предполагаю, что нет.

  • Вы должны добавить пространство имен безопасности в вашу конфигурацию. Что-то вроде этого

    
    
    
  • Вам необходимо настроить Spring Security. Например:

    
    .
     
    
    
  • Этого может быть достаточно, чтобы все "просто работало", но я думаю, что вам стоит посмотреть на реализацию AuthenticationProvider, а не AuthenticationManager. В этом случае вам понадобится конфигурация, подобная этой:

    
    
     
    
    
1
ответ дан 30 November 2019 в 09:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: