Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSP登录页面会话超时_Java_Spring_Jsp_Servlets_Mybatis - Fatal编程技术网

Java JSP登录页面会话超时

Java JSP登录页面会话超时,java,spring,jsp,servlets,mybatis,Java,Spring,Jsp,Servlets,Mybatis,我已经创建了一个酒店管理员模拟登录页面。现在我想给它添加会话时间函数。换句话说,假设用户离开计算机(他仍然登录到管理员网页)大约10分钟。然后当他回来时,我想结束当前会话,然后重定向到登录页面(这更安全,他的个人信息永远不会丢失!) 我如何做到这一点 public class LoginServlet extends SpringInjectedServlet { @Autowired private LoginService loginService; @Override protecte

我已经创建了一个酒店管理员模拟登录页面。现在我想给它添加会话时间函数。换句话说,假设用户离开计算机(他仍然登录到管理员网页)大约10分钟。然后当他回来时,我想结束当前会话,然后重定向到登录页面(这更安全,他的个人信息永远不会丢失!)

我如何做到这一点

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);