2014-10-29 2 views
0

В настоящее время я извлекаю тайм-аут сеанса из базы данных, так как он должен быть настроен, поэтому я просто не могу объявить его в web.xml.Spring - лучший способ контролировать создание сеанса

В моем HttpSessionEventPublisher я в основном извлекаю объект сеанса из HttpSessionEvent и устанавливаю значение таймаута сеанса, которое я получил из базы данных, используя setMaxInactiveInterval.

После расследования, когда я обращаюсь к URL-адресу POST на моем сайте, запускается HttpSessionEventPublisher и создается новый объект Session. Я хотел бы управлять этим поведением, создав объект Session только тогда, когда пользователь успешно прошел аутентификацию (зарегистрировался, прошел через AuthenticationProvider)

Возможно ли это?

ответ

1

HttpSessionEventPublisher не создает сеансы самостоятельно. Он просто переводит события сеанса сервлетов на эквивалентные весенней безопасности. На самом деле создание сеансов не контролируется весенней безопасностью, но при необходимости оно может инициировать.

Если вы просто хотите установить тайм-аут сеанса только после аутентификации, вы можете расширить используемый обработчик аутентификации и установить там время ожидания.

Например, следующий код расширяет SavedRequestAwareAuthenticationSuccessHandler и извлекает тайм-аут от свойств приложения (вместо базы данных, как в вашем случае)


@Component 
public class AuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler { 

    @Value("#{appProperties['session.timeout']}") 
    private int sessionTimeout; 

    private final Logger logger = LoggerFactory.getLogger(AuthenticationSuccessHandler.class); 

    @Override 
    public void onAuthenticationSuccess(HttpServletRequest req, HttpServletResponse res, Authentication authentication) throws ServletException, IOException { 

     logger.debug("onAuthenticationSuccess"); 

     HttpSession session = req.getSession(); 
     session.setMaxInactiveInterval(sessionTimeout); 

     super.onAuthenticationSuccess(req, res, authentication); 
    } 
} 
+0

Да да! Это то, что я закончил делать. : D – mpmp

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