Сеанс сервлета, после выхода из системы, когда нажата кнопка возврата браузера, снова отображается защищенная страница [дубликат]

На этот вопрос уже есть ответ здесь:

Запретить пользователю видеть ранее посещенную защищенную страницу после выхода 5 ответов

У меня есть сервлет и HTML-страница. Как я могу предотвратить нажатие пользователем кнопки «Назад» в браузере после выхода из системы? Я прочитал тот же вопрос в stackoverflow, но в ответах используется отключение истории браузера с помощью java-скрипта или использование страницы - без кэша в заголовках http. Как мы можем реализовать это, используя сервлеты, которые предотвращают действие возврата, http-заголовок без кеша бесполезен, так как Firefox говорит, что срок действия страницы истек, когда она обновляется два раза, снова отображается защищенная страница.

Я сделал так, пример метода просто для попытки (не реально). Мои имя пользователя и пароль публикуются в сервлете со страницы HTML, сервлет сохраняет это в сеансе, если пароль и имя пользователя указаны правильно. Когда снова запрашивается защищенная страница, если сеанс существует, отображается защищенная страница и если пользователь выходит из сеанса, то страница входа в систему показывает, что все работают, за исключением того, что выход из системы завершается неудачно, если пользователь нажимает кнопку «Назад» в браузере.

Как мы можем запретить защищенному сервлету показывать содержимое после выхода из системы, а затем нажать кнопку «Назад» в браузере?

src of welcome.html







    
        Username
        
    
    
        Password
        
    
    
         
         
    
    
         
        
    





источник сервлета

public class Sessionexample extends HttpServlet implements Servlet , Filter {
    private static final long serialVersionUID = 1L;
    public String username =null, password=null;
    public HttpSession session ;
    public PrintWriter pw;
    int do_get =0 ;
    /**
     * Default constructor. 
     */


    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;

        HttpSession session = request.getSession(false);         
        if (session == null || session.getAttribute("username") == null) {
            response.sendRedirect("welcome.html"); // No logged-in user found, so redirect to login page.
            response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
            response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
            response.setDateHeader("Expires", 0);
        } else {
            chain.doFilter(req, res);  
        }
    }


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    {

        do_get=1;
        pw = response.getWriter();
        session=request.getSession(false);
        try
        {
            if(request.getParameter("action")!=null)
            {
                if(request.getParameter("action").equals("logout"))
                {

                    session = request.getSession(true);
                    session.setAttribute("username", "");
                    session.setAttribute("password", "");
                    session.invalidate();
                     response.sendRedirect("welcome.html");
                    return; 
                }
            }
            else
            if(session !=null)
                {
                 if( (String)session.getAttribute(username)!=null)
                username = (String)session.getAttribute("username").toString();
                if( (String)session.getAttribute("password") !=null)
                 password =session.getAttribute("password").toString();
                pw.write("not new-");
                serviced(request,response);
                }

        }
        catch(Exception ex)
        {
            pw.write("Error-"+ex.getMessage());
        } 

    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    {

        if(request.getParameter("username")!=null && request.getParameter("password")!=null )
        {
             username = request.getParameter("username").toString();
             password =  request.getParameter("password").toString(); 
        } 

        serviced(request,response);

    }


    protected void serviced(HttpServletRequest request, HttpServletResponse response) throws IOException
    {

            response.setContentType("text/html");

            pw = response.getWriter();  
        if( username !=null && password !=null)
            if( username.equals("admin") && password.equals("a"))
            {

                try
                {

                    if(do_get==0)
                    {
                session = request.getSession(true);
                session.setAttribute("username", "admin");
                session.setAttribute("password", "a");
                    }               
                pw.write("You are logged in : "+username+"  <br> "+"<a href="?action=logout">   Logout  </a>");

                }
                catch(Exception ex)
                {
                                        response.sendRedirect("welcome.html");

                }

            }
            else
            {
            response.sendRedirect("welcome.html");
            }
            else
                response.sendRedirect("welcome.html");
    }

    @Override
    public boolean accept(Object arg0) throws IOException {
        // TODO Auto-generated method stub
        return false;
    }       

}

Ответы на вопрос(1)

Ваш ответ на вопрос