ligin.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>登陆过滤器</title>
</head>
<body>
<!-- <form action="<%=request.getContextPath() %>/servlet/filter.filter_servlet" method="post"> -->
<form action="filter.filter_servlet" method="post">
<%=request.getContextPath() %><br/>
姓名: <input type="text" name="username" /><br/>
密码: <input type="password" name="password" />
<input type="submit" value="提交"/>
</form>
</body>
</html>
fail.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
登陆失败
</body>
</html>
success.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
登陆成功 ${username}
</body>
</html>
filter_servlet.java
package filter;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class filter_servlet
*/
@WebServlet("/filter_servlet")
public class filter_servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public filter_servlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
String username=request.getParameter("username");
String password=request.getParameter("password");
if(password.equals("123")&&username.equals("123")) {
//校验通过
HttpSession session=request.getSession();
session.setAttribute("username", username);
response.sendRedirect(request.getContextPath()+"/success.jsp");
}
else {
response.sendRedirect(request.getContextPath()+"/fail.jsp"); //重定向
}
}
}
filter.java
package filter_filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class filter implements Filter {
FilterConfig config;
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request=(HttpServletRequest) arg0;//强转
HttpServletResponse response=( HttpServletResponse)arg1;//强转
HttpSession session=request.getSession(); //request获取session对象
String nopath =config.getInitParameter("nopath");
if(nopath!=null) {
String []strArray=nopath.split(";");
for(int i=0;i<strArray.length;i++) {
if(strArray[i]==null||"".equals(strArray[i]))
continue; //出现为空放行
if(request.getRequestURI().indexOf(strArray[i])!=-1) { //由于web.xml用的是"/*"表示过滤所有页面,所以这里去除login.jsp
//优点避免死循环
arg2.doFilter(arg0, arg1);
return;
}
}
}
// if(request.getRequestURI().indexOf("login.jsp")!=-1
// ||request.getRequestURI().indexOf("filter_servlet")!=-1) { //由于web.xml用的是"/*"表示过滤所有页面,所以这里去除login.jsp
// //优点避免死循环
// arg2.doFilter(arg0, arg1);
// return;
// }
if(session.getAttribute("username")!=null) {
//放行
arg2.doFilter(arg0, arg1);
}else {
//重定向
response.sendRedirect(request.getContextPath()+"/login.jsp");
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
config=filterConfig;
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<servlet>
<servlet-name>filter_servlet</servlet-name>
<servlet-class>filter.filter_servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>filter_servlet</servlet-name>
<url-pattern>/filter.filter_servlet</url-pattern>
</servlet-mapping>
<filter>
<filter-name>filter</filter-name>
<filter-class>filter_filter.filter</filter-class>
<init-param>
<param-name>nopath</param-name>
<param-value>login.jsp;filter_servlet;fail.jsp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/*</url-pattern><!-- 被检测的页面 -->
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
</web-app>
目录结构