Tôi có một trang servlet và một trang HTML. Làm cách nào để ngăn người dùng nhấn nút quay lại của trình duyệt sau khi đăng xuất? Tôi đã đọc cùng một câu hỏi trong stackoverflow, nhưng câu trả lời đang sử dụng lịch sử trình duyệt vô hiệu hóa với java script hoặc sử dụng trang - không có bộ nhớ cache trong tiêu đề http. Làm thế nào chúng ta có thể thực hiện nó bằng cách sử dụng các servlet ngăn cản hành động quay trở lại, bộ nhớ cache http-header không có gì vô dụng khi Firefox nói trang đã hết hạn khi nó được làm mới hai lần nữa, trang bảo mật được hiển thị.phiên servlet, sau khi đăng xuất, khi nút quay lại của trình duyệt được nhấn, một lần nữa trang bảo mật được hiển thị
Tôi đã thực hiện theo cách, phương pháp mẫu chỉ để thử (không thực) Tên người dùng và mật khẩu của tôi được đăng lên servlet từ trang HTML servlet lưu trữ trong phiên nếu mật khẩu và tên người dùng là chính xác. Khi trang an toàn được yêu cầu, nếu phiên tồn tại trang bảo mật được hiển thị và id nhật ký người dùng từ phiên, trang đăng nhập hiển thị tất cả đang hoạt động ngoại trừ việc đăng xuất không thành công nếu người dùng truy cập lại nút của trình duyệt.
Làm cách nào để ngăn chặn servlet bảo mật hiển thị nội dung sau khi đăng xuất và sau đó nhấn nút quay lại trong trình duyệt?
src của welcome.html
<html>
<body>
<form method="POST" action="Sessionexample">
<div align="center">
<table border="1" style="border-collapse: collapse">
<tr>
<td>Username</td>
<td><input type="text" name="username" size="20"></td>
</tr>
<tr>
<td>Password</td>
<td><input type="text" name="password" size="20"></td>
</tr>
<tr>
<td height="24"> </td>
<td height="24"> </td>
</tr>
<tr>
<td> </td>
<td><input type="submit" value="Submit" name="B1"></td>
</tr>
</table>
</div>
</form>
</body>
</html>
src của servlet
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'><h1> Logout </h1> </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;
}
}
tôi nghĩ rằng chaining là cần thiết !! – cc4re