2017-02-20 22 views
2

У меня есть webapp, который является типичным шаблоном post-redirect-get. Приложение имеет четко определенный старт и финиш.Как отправить пользователя на другую страницу, основанную на булевом весне?

Как только пользователь завершил свою сессию, их сеанс не истек, но они «сделаны» в отношении приложения. Они должны иметь возможность обновлять финальную страницу приложения и взаимодействовать с ним по своему усмотрению.

Они не должны, однако, иметь возможность изменить URL-адрес или нажать кнопку «Назад», чтобы вернуться в этот момент.

Это легко решить, установив логическое значение в сеансе. Скажем, sessionComplete = true.

Теперь, когда пользователь обращается назад или пытается вручную ударить по другому URL-адресу, если sessionComplete == true, их следует просто перенаправить на последнюю страницу приложения, а контроллеры других страниц никогда не должны быть удалены.

Единственная разница должна заключаться в этом перенаправлении. Каждая другая часть приложения должна выполняться как обычно. Как я могу это сделать весной?

+0

Используйте фильтр для опроса сеанса и перенаправления при необходимости. –

ответ

2

Написание фильтра с рисунком * (все запросы) достаточно хорошо подходит для вашей ситуации. A doFilter способ может посмотреть:

@Override 
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
    // obtaining a sessionComplete value 
    Object value = ((HttpServletRequest) request).getSession().getAttribute("sessionComplete"); 
    boolean sessionComplete = Boolean.valueOf(Objects.requireNonNull(value).toString()); 

    // go to the final page 
    if (sessionComplete) { 
     ((HttpServletResponse)response).sendRedirect("locationToRedirect"); 
    } 

    // otherwise, pass a control to controllers 
    chain.doFilter(request, response); 
} 
+0

Спасибо. Похоже, это будет делать то, что предназначено. –

+0

@ChristopherSchneider, вы можете попробовать, если есть какие-либо вопросы, я буду рад ответить – Andrew

+1

Так что я думаю, что это сработало бы, но мне пришлось сделать это с помощью перехватчика Spring. Я думаю, что одна из наших проприетарных библиотек вызывала проблемы. Во всяком случае, концепция такая же. –

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

  • Нет связанных вопросов^_^