Spring Security 3 SavedRequestAwareAuthenticationSuccessHandler не сохраняет исходный запрос - PullRequest
5 голосов
/ 07 декабря 2011

Я пытаюсь настроить Spring Security 3 таким образом, чтобы при повторном входе пользователей в систему (например, по истечении времени ожидания сеанса) пользователь возвращался на страницу, на которой он находился до начала процесса авторизации.

Я использую SavedRequestAwareAuthenticationSuccessHandler, но исходный запрос, похоже, не сохраняется в кеше.

Ниже приведена моя конфигурация безопасности.

<security:http auto-config="false" 
               use-expressions="true"
               access-denied-page="/views/auth/login?error=true"
               entry-point-ref="authenticationEntryPoint"  >
    <security:intercept-url pattern="/*" access="hasRole('ROLE_USER')" />
    <security:intercept-url pattern="/views/*" access="hasRole('ROLE_USER')" />
    <security:intercept-url pattern="/data/*" access="hasRole('ROLE_USER')" />  
    <security:intercept-url pattern="/auth/*" access="permitAll" />
    <security:logout invalidate-session="true" logout-success-url="/views/auth/login" logout-url="/views/auth/logout" />
        <security:session-management invalid-session-url="/views/auth/login" >
        <security:concurrency-control max-sessions="1" error-if-maximum-exceeded="true" />
    </security:session-management>
    <security:custom-filter ref="authenticationFilter" position="FORM_LOGIN_FILTER"/>
</security:http>

<security:authentication-manager />

<bean id="authenticationFilter" class="com.security.web.filter.UsernamePasswordAuthenticationFilter">             
    <property name="allowSessionCreation" value="true" />
    <property name="authenticationManager" ref="authenticationManager"/>
    <property name="authenticationFailureHandler" ref="aAuthenticationFailureHandler" />
    <property name="authenticationSuccessHandler" ref="authenticationSuccessHandler" />
</bean>

<bean id="authenticationManager" class="com.security.web.manager.AuthenticationManager" />

<bean id="authenticationEntryPoint" class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint" >
    <property name="loginFormUrl" value="/views/auth/login"/>
</bean>

<bean id="authenticationFailureHandler" class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">
    <property name="defaultFailureUrl" value="/views/auth/login?error=true"/>
 </bean>

<bean id="authenticationSuccessHandler" class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler">
    <property name="defaultTargetUrl" value="/views"/>
</bean>

Любая помощь будетбыть оцененным.

Ответы [ 2 ]

3 голосов
/ 28 ноября 2012

Я знаю, что этот вопрос старый, но я хотел задокументировать то, что нашел для других.

Краткий ответ

Проблема в том, что если вы используете неверный URL-адрес сеанса на , тогда исходный запрос не будет сохранен в кеше.

Пояснение

Это обсуждается на весеннем исходном форуме: http://forum.springsource.org/showthread.php?89352-requestCache-null-when-using-session-management-gt-invalid-session-url

ВВыше форума Люк Тейлор, старший член команды безопасности, говорит:

Недействительный URL-адрес сеанса означает, что предыдущий сеанс истек, и пользователь должен начать снова.Нет никакой связи с RequestCache, который используется для восстановления запроса после того, как пользователь вошел в систему.

и

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


0 голосов
/ 03 октября 2012

Возможно, вам не хватает этого:

<bean id="requestCacheAwareFilter"
      class="org.springframework.security.web.savedrequest.RequestCacheAwareFilter">
    <constructor-arg ref="requestCache"/>
</bean>

<bean id="requestCache" class="org.springframework.security.web.savedrequest.HttpSessionRequestCache"/>

также вам нужно добавить запрос к кэшу для аутентификацииSuccessHandler

<property name="requestCache" ref="requestCache"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...