2013-03-22 4 views
1

У меня есть приложение Spring, которое использует JSP. И мне нужно перенаправить одну страницу, но только один раз. Это связано с весенней безопасностью - как только пользователь приходит на эту страницу, мне нужно вызвать перенаправление, чтобы вывести его из системы, но оставаться на той же странице. Есть ли способ, как это сделать только через java, html или js? Или, может быть, я спросил неправду - должен быть какой-то способ, как это сделать, но я не очень разбираюсь в технологиях frontend, поэтому я был бы рад, если бы кто-нибудь мог опубликовать какой-то код, чтобы показать мне, как это сделать work .. Спасибо :)Перенаправление HTML-страницы только один раз

Итак, usecase: user types mywebsite.com/login -> Мне нужно перенаправить вызов, чтобы вывести его в том случае, если он уже зарегистрирован -> тот же сайт появится, но теперь без перенаправления.

PS: Я не могу перенаправить пользователя на другой сайт - это должен быть тот же сайт с тем же исходным кодом.

+0

Вы ищете 'session.invalidate();' на стороне сервера Java в обработчике запроса контроллера. При завершении не перенаправляйтесь на другую страницу. Было бы лучше, если бы вы опубликовали [что вы пробовали] (http://mattgemmell.com/2008/12/08/what-have-you-tried/), чтобы получить лучшую помощь. –

+0

Связанный: [Фильтр проверки сеанса, который отключается от пользователя, когда сеанс истек) (http://stackoverflow.com/q/7370885/1065197), проверьте раздел 2 принятого ответа (почти внизу). –

ответ

0

Если я понимаю ваш случай использования, я предпочел бы вывести пользователя в качестве части действия входа (т. Е. Разделить процесс выхода из системы и вызвать его как из действия выхода из системы, так и из действия входа).

Если это невозможно (и я не могу по какой-то причине не быть), я бы сосредоточился на части «перенаправить, если он вошел в систему», а не «переадресовать только один раз», очень легко проверить без каких-либо изменений в коде, предполагая, что вы используете какие-то сеансы для отслеживания состояния входа в систему.

Отказ от ответственности: я почти ничего не знаю о Sprint, это все очень общие комментарии, которые должны работать на любом классическом веб-сервере.

-1

Вы можете использовать фильтр.

@Override 
    public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { 
      HttpServletRequest test1= (HttpServletRequest) arg0; 

     test1.getRequestURL()); it gives http://localhost:8081/applicationName/menu/index.action 
     test1.getRequestURI()); it gives applicationName/menu/index.action 
     String pathname = test1.getServletPath()); it gives //menu/index.action 


     if(pathname.equals("//menu/index.action")){ 
      arg2.doFilter(arg0, arg1); // call to urs servlet or frameowrk managed controller method 


      // in resposne 
      HttpServletResponse httpResp = (HttpServletResponse) arg1; 
      RequestDispatcher rd = arg0.getRequestDispatcher("another.jsp"); redirect to another page at response time 
      rd.forward(arg0, arg1); 





    } 

выигрыш забудьте поставить <dispatcher>FORWARD</dispatcher> в отображении фильтра в web.xml Если вы не хотите использовать фильтр, который вы можете перенаправить на другой JSP от метода контроллера Урса.

+0

«Фильтр» - это не подходящее место для выполнения этой работы (или любого подобного компонента). –

+0

Если вы не хотите использовать фильтр, вы можете перенаправить на другой jsp из метода urs controller. –

+0

Обратитесь к [этому замечательному ответу и объяснению] (http://stackoverflow.com/a/7371899/1065197), чтобы понять, почему ваш подход неверен. –