2014-12-29 3 views
0

В моем проекте я аутентифицирую проект с весной безопасности. Краткий фрагмент кода из SpringConfig.xml нижеВесенняя аутентификация для звонков после входа в систему?

<bean id="UsernamePasswordAuthenticationFilter" 
    class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter"> 
    <property name="authenticationManager" ref="authenticationManager" /> 
     <property name="filterProcessesUrl" value="/userLogin" /> 
    </bean> 

Он отлично работает, и я понимает, как пружина безопасности внутри ручки, что.

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

Если мы не используем третью библиотеку аутентификации партии, как яровая безопасность Большинство вебов-приложения, как правило, выполняет проверку подлинности пользователя в то время как журнал в и поместить информацию о пользователе по сессии (я могу видеть, как это происходит в весенней безопасности с описанным выше конфигурациями). Затем для любого успешного действия приложения проверяют, существует ли аутентифицированный пользователь под сеансом или нет. Если yesaction разрешено иначе , он перенаправляется на экран входа в систему. Но я не уверен, где это происходит?

ответ

1

Ключевым компонентом в Spring Security является security filter chain. С помощью конфигурации вы определяете, какие фильтры участвуют в цепочке. Вот некоторые из них по умолчанию (проверить официальную документацию и JavaDoc для получения дополнительной информации):

  • ChannelProcessingFilter - это запрос должен быть HTTPS?
  • SecurityContextPersistenceFilter - Мы уже прошли аутентификацию пользователя, хранящегося в сеансе HTTP?
  • ConcurrentSessionFilter - это пользователь проверку подлинности более чем один/два раза/...
  • фильтры обработки аутентификации
    • UsernamePasswordAuthenticationFilter - это запрос POST /login? Должны ли мы позвонить AuthenticationManager?
    • ...
  • SecurityContextHolderAwareRequestFilter - вы хотите интегрировать с Servlet API безопасности?
  • RememberMeAuthenticationFilter - Вы хотите запомнить аутентификацию в cookie?
  • AnonymousAuthenticationFilter - Вы хотите иметь специальную анонимную аутентификацию для неавторизованных запросов?
  • ExceptionTranslationFilter - является ли исключение, связанное с контролем доступа? Должны ли мы инициировать аутентификацию (точка входа)?
  • FilterSecurityInterceptor - Требуется ли запрашиваемый URI аутентифицированный пользователь или определенная роль? Должны ли мы выбросить AccessDeniedException?
+0

Спасибо, Pavel. На самом деле мой проект настроил все фильтры, о которых вы упомянули выше. Но мой вопрос таков. Скажем, пользователь зарегистрировал в приложении.Теперь для большинства URL-адресов приложения, кроме некоторых конкретных функций Я просто хочу проверить, существует ли аутентифицированный пользователь или нет в сеансе, который весной (я не хочу проверять какие-либо роли для них). Я не уверен, какая конфигурация необходима, чтобы проверить, существует ли аутентифицированный пользователь в сеансе без проверки полномочий/роли? – emilly

+0

Если вы используете проверку на основе выражений, вы можете использовать 'isAuthenticated()' в качестве условия доступа. Если вы используете старый атрибут проверки безопасности, то есть ключевое слово 'IS_AUTHENTICATED'. http://docs.spring.io/spring-security/site/docs/3.0.x/reference/el-access.html –

Смежные вопросы