a.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>A</title>
</head>
<body>
<h1>AAAAAA</h1>
<a href="list.jsp">return...</a>
</body>
</html>
b.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>B</title>
</head>
<body>
<h1>BBBBB</h1>
<a href="list.jsp">return...</a>
</body>
</html>
c.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>C</title>
</head>
<body>
<h1>CCCCCC</h1>
<a href="list.jsp">return...</a>
</body>
</html>
d.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>D</title>
</head>
<body>
<h1>DDDDDD</h1>
<a href="list.jsp">return...</a>
</body>
</html>
list.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<a href="a.jsp">AAA</a>
<a href="b.jsp">BBB</a>
<a href="c.jsp">CCC</a>
<a href="d.jsp">DDD</a>
</body>
</html>
login.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>LOGIN</title>
</head>
<body>
<form action="dologin.jsp" method="post">
name:<input type="text" name="name">
<input type="submit" value="submit">
</form>
</body>
</html>
dologin.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<% Const.NAME=request.getParameter("name");%>
</body>
</html>
const:
package com.sa.util;
public class Const {
public static String NAME="";
public static final String OKURL="/pages/a.jsp,/pages/list.jsp,/pages/login.jsp,/pages/dologin.jsp";
}
loginFilter:
package com.sa.filter;
import com.sa.util.Const;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebFilter(filterName = "LoginFilter")
public class LoginFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
//1.获取url
///1012/pages/a.jsp
String uri=((HttpServletRequest)req).getRequestURI();
//http://localhost:8080/1012/pages/a.jsp
String url=((HttpServletRequest)req).getRequestURL().toString();
///pages/a.jsp
String path=((HttpServletRequest) req).getServletPath();
//System.out.println(uri);
//System.out.println(url);
//System.out.println(path);
//2.首先检查url是否需要登录检查
if(Const.OKURL.contains(path)){
//包括,放行
System.out.println(1);
chain.doFilter(req, resp);
return;
}
//3.需要登录检查的url是否已经登录
if(!Const.NAME.equals("")&&Const.NAME !=null){
//如果name不为空,则放行
System.out.println(2);
chain.doFilter(req, resp);
return;
}
//4.如果没有登录,则需要重定向登录页
System.out.println(3);
((HttpServletResponse)resp).sendRedirect("login.jsp");
}
public void init(FilterConfig config) throws ServletException {
}
}
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.sa.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
功能描述:除了const中的OKURL之外,其他的所有访问都需要进行登录检查,如果没有登录,则重定向到login.jsp,如果已经登录,则可以访问。
开始测试:
①:进入a.jsp:
②:返回list.jsp:
③:尝试进入b.jsp,发现无法进入,直接重定向到login.jsp:
④:输入name,登录:
⑤:再次尝试登录b.jsp: