2014-10-17 5 views
0

Когда пользователь регистрируется в информации о сеансе, сохраняется. И информация о сеансе стирается, когда пользователь регистрируется . Но когда я нажимаю кнопку «Назад» браузера, отображается информация пользователя. Поскольку сеанс завершен, но мы не можем быть уверены, что выполняется операция входа в систему. . Как решить эту проблему ?Как кнопка возврата браузера назад весной mvc

----------------------------log out ------------------------------- 

    @RequestMapping(value="logout.htm",method = RequestMethod.GET) 
    public void logOut(HttpSession session,HttpServletResponse     
    response,HttpServletRequest request) throws IOException{ 
    final String refererUrl = request.getHeader("Referer"); 
    response.setHeader(refererUrl, "no-cache"); 
    response.setHeader("Cache-Control", "no-cache"); 
    response.setDateHeader("Expires", 0); 
    session.removeAttribute("user"); 
    session.invalidate(); 
    response.sendRedirect("index.htm"); 
    } 
    ---------------------------------- login --------------- 
    @RequestMapping(value="/userLogin",method=RequestMethod.POST) 

    public @ResponseBody JsonResponse 
login(@ModelAttribute(value="user") User user, BindingResult  result,HttpServletRequest request,HttpSession session,ModelMap model) throws UnsupportedEncodingException{ 

    JsonResponse res = new JsonResponse(); 

    if(!result.hasErrors()&& userService.findUser(user, request)){ 
     res.setStatus("SUCCESS"); 
     session.setAttribute("user", 
     new String(user.getUsername().getBytes("iso- 8859-1"), "UTF-8")); 
     } 
     else{ 
     res.setStatus("FAIL"); 
     result.rejectValue("username","1"); 
     res.setResult(result.getAllErrors()); 
     } 
     return res; 
    } 
    --------------------------profile -------------------------------------- 

    @RequestMapping(value="myProfile.htm",method = RequestMethod.GET) 
    public String showmyProfile(@ModelAttribute(value="addUser") User user,Model   model,HttpServletRequest request, 
     HttpServletResponse response, 
     HttpSession session) throws IOException{ 

     if(session.getAttribute("user")== null){ 
     response.sendRedirect("index"); 
    } 

ответ

3

я использовать этот метод. сначала создайте один класс, который реализует метод фильтрации и переопределения doFilter(). код doFilter() является:

@Override 
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
HttpServletResponse hsr = (HttpServletResponse) res; 
hsr.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. 
hsr.setHeader("Pragma", "no-cache"); // HTTP 1.0. 
hsr.setDateHeader("Expires", 0); // Proxies. 
chain.doFilter(req, res); 
} 

после использования фильтра в web.xml. этот фильтр - это.

<filter> 
    <filter-name>noCacheFilter</filter-name> 
    <filter-class>com.example.NoCacheFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>noCacheFilter</filter-name> 
    <url-pattern>/secured/*.jsp</url-pattern>// urls that not cached 
</filter-mapping> 
0
response.setHeader(refererUrl, "no-cache"); 
response.setHeader("Cache-Control", "no-cache"); 
response.setDateHeader("Expires", 0); 

Приведенный выше код очищает кэш и истекающий сессию в стороне сервера. Но независимо от того, является ли сеанс живым или нет, его следует проверить или обработать в вашем представлении (HTML или JSP). Вы можете иметь следующие мета-теги, на ваш взгляд, чтобы сказать нет-кэша и не-магазин

<meta http-equiv="Cache-control" content="no-cache"> 

или

<META HTTP-EQUIV="Cache-Control" CONTENT="No-Cache,Must-Revalidate,No-Store"> 

Пожалуйста, обратитесь this для браузера управления кэшем

+0

Я добавил этот тег на свою страницу просмотра. \t \t \t

+0

работает нормально правильно? – Sridhar

1

Настройка перехватчик в Servlet контексте, как это:

<!-- configuration for handling browser back button --> 
<mvc:interceptors> 
    <mvc:interceptor> 
     <mvc:mapping path="/**/*"/> 
     <beans:bean id="webContentInterceptor" class="org.springframework.web.servlet.mvc.WebContentInterceptor"> 
      <beans:property name="cacheSeconds" value="0"/> 
      <beans:property name="useExpiresHeader" value="true"/> 
      <beans:property name="useCacheControlHeader" value="true"/> 
      <beans:property name="useCacheControlNoStore" value="true"/> 
     </beans:bean> 
    </mvc:interceptor> 
</mvc:interceptors> 

Примечание: Не забудьте удалить кэш браузера при тестировании приложения.

1

В Spring-security 4.0 эта проблема решена по умолчанию. Вам не нужно писать какие-либо дополнительные коды, даже в конфигурациях безопасности XML.

+0

Я задаю этот вопрос много времени назад. но спасибо за ваш ответ. –

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