Java JSP登录页面会话超时
我已经创建了一个酒店管理员模拟登录页面。现在我想给它添加会话时间函数。换句话说,假设用户离开计算机(他仍然登录到管理员网页)大约10分钟。然后当他回来时,我想结束当前会话,然后重定向到登录页面(这更安全,他的个人信息永远不会丢失!) 我如何做到这一点Java JSP登录页面会话超时,java,spring,jsp,servlets,mybatis,Java,Spring,Jsp,Servlets,Mybatis,我已经创建了一个酒店管理员模拟登录页面。现在我想给它添加会话时间函数。换句话说,假设用户离开计算机(他仍然登录到管理员网页)大约10分钟。然后当他回来时,我想结束当前会话,然后重定向到登录页面(这更安全,他的个人信息永远不会丢失!) 我如何做到这一点 public class LoginServlet extends SpringInjectedServlet { @Autowired private LoginService loginService; @Override protecte
public class LoginServlet extends SpringInjectedServlet {
@Autowired
private LoginService loginService;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String id = req.getParameter("id");
String password = req.getParameter("password");
String error = null;
//code for checking correct input
}
// mock
private boolean check(String id, String password) {
return loginService.authenticate(id, password);
}
@Override
public void init() throws ServletException {
System.out.println("LoginServlet");
}
}
验证凭据后,为userid设置会话变量,并设置会话过期时间:
session.setMaxInactiveInterval(600); //600 secs = 10 mins
session.setAttribute("userid", userid);
然后在所有JSP和servlet的顶部执行以下操作:
String userid = (String)session.getAttribute("userid");
if(userid==null)
{
response.sendRedirect("login.jsp");
return; //the return is important; forces redirect to go now
}
10分钟后,如果用户单击某个链接、刷新或以某种方式转到另一个页面,这只会将用户重定向到登录页面。如果他们只是让页面保持打开状态,它仍然会显示。要改变这一点,您必须以某种方式使用Javascript。在验证凭据后,为用户ID设置会话变量,并设置会话过期时间:
session.setMaxInactiveInterval(600); //600 secs = 10 mins
session.setAttribute("userid", userid);
然后在所有JSP和servlet的顶部执行以下操作:
String userid = (String)session.getAttribute("userid");
if(userid==null)
{
response.sendRedirect("login.jsp");
return; //the return is important; forces redirect to go now
}
10分钟后,如果用户单击某个链接、刷新或以某种方式转到另一个页面,这只会将用户重定向到登录页面。如果他们只是让页面保持打开状态,它仍然会显示。要改变这一点,您必须以某种方式使用Javascript。使用身份验证过滤器来检查每个请求中的会话
HttpSession session = request.getSession();
if (session == null || session.getAttribute("username") == null) {
// Forward the control to login.jsp if authentication fails or session expires
request.getRequestDispatcher("/login.jsp").forward(request,
response);
}
这将检查每个请求的会话登录用户名。如果请求为空或会话已过期,它将重定向到登录页面
将其添加到web.xml中
<session-config>
<session-timeout>5</session-timeout>
</session-config>
5.
检查它。使用身份验证过滤器检查每个请求中的会话
HttpSession session = request.getSession();
if (session == null || session.getAttribute("username") == null) {
// Forward the control to login.jsp if authentication fails or session expires
request.getRequestDispatcher("/login.jsp").forward(request,
response);
}
这将检查每个请求的会话登录用户名。如果请求为空或会话已过期,它将重定向到登录页面
将其添加到web.xml中
<session-config>
<session-timeout>5</session-timeout>
</session-config>
5.
检查它。您当前的代码是什么样子的?我有一个使用doPost方法的loginServlet。您当前的代码是什么样子的?我有一个使用doPost方法的loginServlet。谢谢提供信息。但是如何设置Javascript?我应该在google或任何好的例子中键入什么样的关键字?我想你应该做的是在客户端设置一个cookie,并让它在服务器会话过期的同时过期(或者在服务器会话过期后不久,以确保它能正常工作)。然后在Javascript中有一个计时器读取cookie并查看其是否已过期,并在过期时设置url位置。沿着这些路线的东西。你不能让Ajax点击服务器查看会话是否过期,因为这将被视为活动,并重置服务器会话过期的计时器,使其不会过期。好的,但我对Javascript不熟悉,所以很难理解所有的单词。代码是什么样子的?我没有Javascript的任何示例代码。您应该查找如何在Javascript中获取/设置Cookie,以及如何使用两个计时器方法setTimeout和setInterval。谢谢您提供的信息。但是如何设置Javascript?我应该在google或任何好的例子中键入什么样的关键字?我想你应该做的是在客户端设置一个cookie,并让它在服务器会话过期的同时过期(或者在服务器会话过期后不久,以确保它能正常工作)。然后在Javascript中有一个计时器读取cookie并查看其是否已过期,并在过期时设置url位置。沿着这些路线的东西。你不能让Ajax点击服务器查看会话是否过期,因为这将被视为活动,并重置服务器会话过期的计时器,使其不会过期。好的,但我对Javascript不熟悉,所以很难理解所有的单词。代码是什么样子的?我没有Javascript的任何示例代码。您应该查找如何在Javascript中获取/设置Cookie,以及如何使用两个计时器方法setTimeout和setInterval.request.getSession缺少括号。request.getSession()从不返回null,请使用request.getSession(false);request.getSession缺少括号。request.getSession()从不返回null,请使用request.getSession(false);