2012-03-26 1 views
0

У меня есть приложение, которое использует SwitchUserFilter. В обычных случаях работа переключения прекращается, но если мы укажем URL выхода, когда пользователь фактически не переключился, пользователь выйдет из системы (ожидается), но когда он снова попытается войти в систему, приложение пытается перенаправить он до последней страницы, к которой он попытался получить доступ (то есть URL-адрес пользователя коммутатора) .. где снова пользователь обнаружил, что он не переключился, и поэтому возникает ошибка, пользователь выйдет из системы, и поэтому цикл продолжается ,Безопасность пружины: функциональность «переключателя пользователя» вызывает тупик, если мы выходим перед коммутатором

Следующая моя весна файл конфигурации:

<?xml version="1.0" encoding="UTF-8"?> 

<!-- - Sample namespace-based configuration - --> 

<beans:beans xmlns="http://www.springframework.org/schema/security" 
    xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
         http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd"> 

    <global-method-security pre-post-annotations="enabled"> 
     <!-- AspectJ pointcut expression that locates our "post" method and applies 
      security that way <protect-pointcut expression="execution(* bigbank.*Service.post*(..))" 
      access="ROLE_TELLER"/> --> 
    </global-method-security> 

    <http use-expressions="true"> 
     <intercept-url pattern="/**" access="isAuthenticated()" /> 
     <custom-filter after="FILTER_SECURITY_INTERCEPTOR" ref="switchUserProcessingFilter" /> 
     <form-login /> 
     <logout invalidate-session="true" logout-url="/do/logout" /> 
    </http> 
    <!-- Usernames/Passwords are rod/koala dianne/emu scott/wombat peter/opal --> 

    <authentication-manager> 
     <authentication-provider> 
      <user-service id="userService"> 
       <user name="rod" password="koala" authorities="supervisor, teller, user" /> 
       <user name="dianne" password="emu" authorities="teller, user" /> 
       <user name="scott" password="wombat" authorities="user" /> 
       <user name="peter" password="opal" authorities="user" /> 
      </user-service> 
     </authentication-provider> 
    </authentication-manager> 

    <beans:bean id="switchUserProcessingFilter" 
     class="org.springframework.security.web.authentication.switchuser.SwitchUserFilter"> 

     <beans:property name="userDetailsService" ref="userService"> 

     </beans:property> 
     <beans:property name="switchUserUrl" value="/switchUser" /> 
     <beans:property name="exitUserUrl" value="/exitUser" /> 
     <beans:property name="targetUrl" value="/index.jsp" /> 
    </beans:bean> 

</beans:beans> 

Любые предложения о том, как я могу справиться с этим?

Практический случай может быть, когда я переключил пользователя, а сеанс истекает. Не зная, что сеанс завершен, пользователь пытается щелкнуть по URL-адресу «exit user», который затем перенаправляет его на страницу входа в систему, и вышеуказанный цикл продолжается.

ответ

0

Как упоминалось в статье this, я внедрил пользовательский обработчик успеха входа, имитирующий SavedRequestAwareAuthenticationSuccessHandler, который является обработчиком успеха входа по умолчанию. Он извлекает URL-адрес, к которому мы пытались получить доступ, прежде чем перенаправляться на страницу входа из кэша запросов (там, где он был сохранен ExceptionTranslationFilter, при том, что мы не прошли проверку подлинности) и перенаправляет на этот URL-адрес. Я просто настроил его, чтобы перейти к корневому URL-адресу, когда он столкнулся с чем-то вроде «exitUser '

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