1.出现login、error界面以及util包下的常量定义类
login.jsp
<%--
Created by IntelliJ IDEA.
User: lenovo
Date: 2021/11/15
Time: 12:38
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="../login">
用户名:<input type="text" name="username"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
error.jsp
<%--
Created by IntelliJ IDEA.
User: lenovo
Date: 2021/11/15
Time: 18:21
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>error</title>
</head>
<body>
<h1>用户名输入错误!</h1>
<a href="http://localhost:8088/javaweb_filter/sys/login.jsp">返回登录界面</a>
</body>
</html>
package com.rjst.util;
public class Content {
public static final String User_SESSION="usersession";
}
2.在多个界面中进行跳转,使用好servlet类来进行判断
登陆判断
package com.rjst.servlet;
import com.rjst.util.Content;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
// System.out.println(username);
if(username.equals("admin")==true){
req.getSession().setAttribute(Content.User_SESSION,req.getSession().getId());
resp.sendRedirect("sys/index.jsp");
}else{
resp.sendRedirect("error.jsp");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
注销用户判断
package com.rjst.servlet;
import com.rjst.util.Content;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class DisrectServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getSession().removeAttribute(Content.User_SESSION);
resp.sendRedirect("sys/login.jsp");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
3.新建一个过滤器来进行判断此时是否注销类控制来判断是否要进行跳转
package com.rjst.Filter;
import com.rjst.util.Content;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class UserloginFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest servletRequest = (HttpServletRequest) request;
HttpServletResponse servletResponse = (HttpServletResponse) response;
HttpSession session = servletRequest.getSession();
// 获得用户请求的URI
String path = servletRequest.getRequestURI();
//System.out.println(path);
// 从session里取员工工号信息
String empId = (String) session.getAttribute(Content.User_SESSION);
// 登陆页面无需过滤
if(path.indexOf("/login.jsp") > -1) {
filterChain.doFilter(servletRequest, servletResponse);
return;
}
// 判断如果没有取到员工信息,就跳转到登陆页面
if (empId == null || "".equals(empId)) {
// 跳转到登陆页面
servletResponse.sendRedirect("sys/login.jsp");
} else {
// 已经登陆,继续此次请求
filterChain.doFilter(request, response);
}
}
public void destroy() {
}
}
在过滤器中加上一层判断,使得初次登陆时不对login.jsp的内容进行判断。
4.项目实际结构: