2017-02-23 238 views
0

Я пробовал все решения. Я столкнулся 2 вопроса:Весенняя безопасность: всегда переадресовывается на invalid-session-url при выходе из системы

  1. Выход перенаправляет на недействительные-сессии для URL
  2. Даже когда приложение выходит из системы, сеанс истекло событие держит повторяющиеся на каждом заданном интервале времени (скажем, 10 минут). Это вызывает действие отправки страницы входа в систему (кнопка входа) для перенаправления на неверный-сеанс-url. Поэтому, если я выхожу из системы и пытаюсь войти в систему через 10 минут (это интервал времени ожидания сеанса), страница входа снова перенаправляется на логин? Logout = 1 (invalid-session-url) вместо входа в приложение. После этого я могу войти в систему.

Ниже приведены изменения, которые я сделал, после чего я столкнулся над вопросами:

  • Я изменил доступ к/Войти Страницу из шаблона HTTP = «/ вход в систему» ​​ безопасности = «нет» к intercept-url pattern = "/ login" access = "isAnonymous()" для реализации csrf. Я попробовал , переключая доступ к allowall.
  • Я наблюдал в браузере, каждый раз, когда я отключала, текущий JSESSIONID отбрасывается и новый JSESSIONID создается в браузере, и выход из системы действие перенаправляет недействителен-сеансового URL вместо logout-success-url.
  • На входе в снова, JSESSIONID остается такой же, как недавно создал JSESSIONID после выхода из системы. Разве это не должно измениться?

Ниже конфигурация безопасности контекст:

<http pattern="/" security="none"/> 
<!--<http pattern="/login" security="none"/>--> 
<http pattern="/resources/assets/**" security="none"/> 
<http pattern="/resources/bootstrap/**" security="none"/> 
<http pattern="/resources/config/**" security="none"/> 
<http pattern="/resources/css/**" security="none"/> 
<http pattern="/resources/data/**" security="none"/> 
<http pattern="/resources/font-awesome-4.5.0/**" security="none"/> 
<http pattern="/resources/fonts/**" security="none"/> 
<http pattern="/resources/images/**" security="none"/> 

<http auto-config="false" use-expressions="true" entry-point-ref="loginUrlAuthenticationEntryPoint"> 

    <!--permitall isAnonymous()--> 
    <intercept-url pattern="/login" access="isAnonymous()" /> 
    <intercept-url pattern="/login?logout=1" access="isAnonymous()" /> 
    <intercept-url pattern="/login?logout=0" access="isAnonymous()" /> 
    <intercept-url pattern="/login?logout=2" access="isAnonymous()" /> 
    <intercept-url pattern="/login?error" access="isAnonymous()" /> 
    <intercept-url pattern="/**" access="isAuthenticated()" /> 
    <intercept-url pattern="/user/*" access="isAuthenticated()" /> 
    <intercept-url pattern="/resources/js/angular/**" access="isAuthenticated()" /> 

    <custom-filter position="FORM_LOGIN_FILTER" ref="customUsernamePasswordAuthenticationFilter" /> 
    <logout logout-success-url="/login?logout=0" invalidate-session="true" delete-cookies="JSESSIONID" /> 
    <!--<logout success-handler-ref="customLogoutSuccessHandler" invalidate-session="true" delete-cookies="JSESSIONID" 
     newSession/>--> 
    <session-management invalid-session-url="/login?logout=1" session-fixation-protection="migrateSession"> 
     <concurrency-control max-sessions="1" expired-url="/login?logout=2" /> 
    </session-management> 
    <csrf/> 
    <headers/> 
</http> 

<beans:bean id="loginUrlAuthenticationEntryPoint" 
     class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint"> 
    <beans:property name="loginFormUrl" value="/login"/> 
</beans:bean> 


<authentication-manager alias="authenticationManager"> 
    <authentication-provider ref="customAuthenticationProvider"/> 
</authentication-manager> 

<beans:bean id="customUsernamePasswordAuthenticationFilter" 
     class="com.vitrana.hilit.web.security.CustomAuthenticationFilter" > 
    <beans:property name="authenticationManager" ref="authenticationManager"/> 
    <beans:property name="authenticationFailureHandler" ref="failureHandler"/> 
    <beans:property name="authenticationSuccessHandler" ref="successHandler"/> 
    <beans:property name="usernameParameter" value="hdnUserName" /> 
    <beans:property name="passwordParameter" value="password" /> 
</beans:bean> 
<beans:bean id="successHandler" class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler"> 
    <beans:property name="defaultTargetUrl" value="/user/dashboard.jsp"/> 
</beans:bean> 
<beans:bean id="failureHandler" class="com.vitrana.hilit.web.security.UserNameCachingAuthenticationFailureHandler"> 
    <beans:property name="defaultFailureUrl" value="/login?error"/> 
</beans:bean> 
<beans:bean id="customLogoutSuccessHandler" class="com.vitrana.hilit.web.security.CustomLogoutSuccessHandler" > </beans:bean> 

<beans:bean class="com.vitrana.hilit.web.security.SessionDestroyedListener"> 
</beans:bean> 

Просьба предложить. Любая помощь приветствуется. Thanks

+0

Вы можете найти свое решение здесь http://stackoverflow.com/questions/7391735/difference-between-access-permitall-and-filters-none – Innocuous

+0

Я пробовал все это. Не работает. Я не могу добавить фильтры = none, так как я использую security taglib и csrf на странице. Пожалуйста, предложите другое решение. – Curiousreed

+0

Вы пытались удалить элемент 'invalidate-session =" true "' из ''? – jlumietu

ответ

-1

попытаться поместить invalidate-session = "false" в тег выхода. Возможно, это может помочь.

+0

Нет. Это ничего не делало. Проблема возникает, поскольку я должен был предоставить анонимный доступ для входа, чтобы сделать работу защиты csrf Curiousreed