Я занимаюсь разработкой корпоративных приложений, включая gwt / gwtp и Spring Security.
Я добавляю некоторые проблемы с истечением времени ожидания сеанса, потому что SimpleRedirectInvalidSessionStrategy, который по умолчанию используется, выполняет response.sendRedirect (), ответ html-страницы, который я хотел перенаправить, проглатывает gwt com.google.gwt.user.client.rpc.InvocationException как сообщение об исключении. и перенаправления не происходит.
для решения этого
1. Я определяю свой сеанс-manamgemt-фильтр cosutom
для этого вам нужно в вашем конфигурационном файле spring-security.xml
<session-management session-fixation-protection="none"/>
этой весной secuirty не будет использовать фильтр управления сеансом по умолчанию.
определить фильтр управления сеансом
введите код здесь
{
<custom-filter position="SESSION_MANAGEMENT_FILTER" ref="mySessionManagmentFilter"/>
<beans:bean id="mySessionManagmentFilter"
class="org.springframework.security.web.session.SessionManagementFilter">
<beans:constructor-arg index="0" ref="mySessionSecurityContextRepository"/>
<beans:constructor-arg index="1" ref="mySessionAutenticationStrategy"/>
<beans:property name="invalidSessionStrategy">
<beans:ref local="myInvalidSessionStrategy"/>
</beans:property>
</beans:bean>
<beans:bean id="mySessionSecurityContextRepository"
class='org.springframework.security.web.context.HttpSessionSecurityContextRepository'>
<beans:property name='allowSessionCreation' value='false'/>
</beans:bean>
<beans:bean id="mySessionAutenticationStrategy"
class="org.springframework.security.web.authentication.session.ConcurrentSessionControlStrategy">
<beans:constructor-arg name="sessionRegistry" ref="sessionRegistry"/>
<beans:property name="maximumSessions" value="1"/>
<beans:property name="exceptionIfMaximumExceeded" value="false"/>
<beans:property name="alwaysCreateSession" value="true"/>
</beans:bean>
<beans:bean id="myInvalidSessionStrategy"
class="com.my.project.MyInvalidSessionStrategy">
<beans:constructor-arg value="/login.jsp?timeout=1"/>
</beans:bean>
}
здесь на заказ - MyInvalidSessionStrategy
{
public class MyInvalidSessionStrategy implements InvalidSessionStrategy {
private final Logger logger = LoggerFactory.getLogger(getClass());
private final String destinationUrl;
public OperationalInvalidSessionStrategy(String invalidSessionUrl) {
this.destinationUrl = invalidSessionUrl;
}
@Override
public void onInvalidSessionDetected(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
String exMsg =session timeout ! , need to redirect to login page
logger.warn(exMsg);
throw new TimeOutException(exMsg);
}
}
}
поэтому, когда истекает время ожидания, новая реализация выдает исключение ..
исключение может быть грузовик при обратном вызове gwt onFailure метод
проверьте тип исключения и по методу onFailure перенаправьте пользователя на страницу входа.
с Window.Location.replace(GWT.getHostPageBaseURL() + "/login.jsp")