JavaEE、servlet、JSP-过滤器问题
我的代码: sessionFilter.javaJavaEE、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 =
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,那么在它的工作文件夹中查找翻译后的文件。代码在那里。