Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.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/4/jsp/3.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
JavaEE、servlet、JSP-过滤器问题_Java_Jsp_Session_Servlets_Filter - Fatal编程技术网

JavaEE、servlet、JSP-过滤器问题

JavaEE、servlet、JSP-过滤器问题,java,jsp,session,servlets,filter,Java,Jsp,Session,Servlets,Filter,我的代码: sessionFilter.java public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res =

我的代码:

sessionFilter.java

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

    if (session == null) {
        res.sendRedirect("errorPage.jsp");
    } else {
        chain.doFilter(request, response);
    }
}
web.xml

<filter>
    <filter-name>sessionFilter</filter-name>
    <filter-class>filters.sessionFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>sessionFilter</filter-name>
    <url-pattern>/loginSuccess.jsp</url-pattern>
    <dispatcher>REQUEST</dispatcher>
  </filter-mapping>

会话过滤器
filters.sessionFilter
会话过滤器
/loginsAccess.jsp
要求
loginsAccess.jsp

Logged successfull, Hello
            <p style="color: blue"><%=request.getSession().getAttribute("User")%></p>

            <form action="LogoutServlet" method="post">
                <input type="submit" value="Logout">
            </form>
登录成功,您好


当我第一次运行loginsucess.jsp时,它会正确地将我重定向到errorPage.jsp,但当我运行更多次时,它会显示会话属性为null的loginsucess.jsp页面。我哪里出错了?我使用
session.setMaxInactivativeInterval(-1)创建会话

loginServlet.java

 try {
                    Query q = entityManager.createQuery("select u from User u where u.email = :email", User.class).setParameter("email", email);;
                    User userEmail = (User) q.getSingleResult();
                    if (email.equals(userEmail.getEmail()) && password.equals(userEmail.getPassword())) {
                        HttpSession session = request.getSession();
                        session.setMaxInactiveInterval(-1);
                        session.setAttribute("User", email);
                        RequestDispatcher rd = getServletContext().getRequestDispatcher("/loginSuccess.jsp");
                        rd.include(request, response); 
    } else .....
errorPage.jsp

<body>
    <div id="container">
        <h1><a href="index.jsp">LIBRARY</a></h1>
        <div class="topbar">
            <a href="register.jsp">Register</a> <a href="login.jsp">Login</a>
            <div class="menu">MENU</div>
            <div class="main">ERROR</div>
                <div style="clear:both"></div>
        </div>
        <br>

    </div>
    </body>

菜单
错误


我通过以下方式解决问题:

HttpSession session = req.getSession(false);
         Object user = session.getAttribute("User");
        if (user == null) {
            res.sendRedirect("errorPage.jsp");
        } else {
            chain.doFilter(request, response);
        }

会话的用户属性放在哪里?errorPage.jsp中有什么代码?可能这就是创建会话的地方。是的,errorPage.jsp创建了一个会话,以便后续请求通过您的过滤器。您可以将session=“false”添加到它的页面指令中。但实际上,您的筛选器应该检查@jMounir向您询问的“用户”会话属性。为什么要使用session.setMaxInactiveInterval(-1)?间隔值为零或更小表示会话永远不会超时。我在google中发现,当我设置MaxInactiveInterval(-1)时,会话将在浏览器关闭时失效,现在我认为这是错误的。顺便说一句,你能解释一下会话是如何在这个页面中创建的吗?JSP会自动创建会话,除非你指示它不要这样做。如果您使用的是Tomcat,那么在它的工作文件夹中查找翻译后的文件。代码在那里。