欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaWeb--Filter

程序员文章站 2022-05-23 08:36:35
...

什么是Filter?

Filter是一种过滤器,根据需求来过滤数据

Filter的使用步骤

  • 导入javax.servlet包中的Filter接口
  • 重写Filter接口下的方法
    JavaWeb--Filter
  • 三个方法的介绍
    JavaWeb--Filter
  • 在web.xml中配置filter信息,整体逻辑和配置servlet一致
 <filter>
        <filter-name>test</filter-name>
        <filter-class>org.westos.demo03.FilterTest</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>test</filter-name>
        <url-pattern>/filter</url-pattern>
    </filter-mapping>

Filter过滤器的应用

  • 需求:输入正确的用户名才能访问登录成功的页面,注销之后就不能访问
  • 存储attribute的常量
public class Constant {
	public final static String USER_SESSION="USER_SESSION";
}
  • 登陆的类
public class Login extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String username = req.getParameter("username");
		//如果用户名正确,则跳转到登录成功页面,不正确,则跳转到错误页面
		if (username.equals("admin")){
			//在session添加信息,即不注销就可以访问成功页面
			req.getSession().setAttribute(Constant.USER_SESSION,req.getSession().getId());
			//页面跳转
			resp.sendRedirect("/sys/success.jsp");
		}else {
			resp.sendRedirect("/error.jsp");
		}
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		super.doPost(req, resp);
	}
}
  • 注销的类
public class Logout extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		Object attribute = req.getSession().getAttribute(Constant.USER_SESSION);
		//如果arrribute不为空,则证明已经登陆了
		if (attribute!=null){
			req.getSession().removeAttribute(Constant.USER_SESSION);
			resp.sendRedirect("/login.jsp");
		}
		else {
			resp.sendRedirect("/login.jsp");
		}
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		super.doPost(req, resp);
	}
}
  • 过滤信息的类
public class LoginFilter implements Filter {
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {

	}

	@Override
	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) servletRequest;
		HttpServletResponse response = (HttpServletResponse) servletResponse;
		//过滤信息:如果session的信息为空,则不能登陆
		if (request.getSession().getAttribute(Constant.USER_SESSION)==null) {
			response.sendRedirect("/error.jsp");
		}
		filterChain.doFilter(request, response);
	}

	@Override
	public void destroy() {

	}
}
  • web.xml信息
<!--登陆-->
    <servlet>
        <servlet-name>login</servlet-name>
        <servlet-class>org.westos.demo01.Login</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/servlet/login</url-pattern>
    </servlet-mapping>

    <!--注销-->
    <servlet>
        <servlet-name>logout</servlet-name>
        <servlet-class>org.westos.demo01.Logout</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>logout</servlet-name>
        <url-pattern>/servlet/logout</url-pattern>
    </servlet-mapping>

    <!--过滤-->
    <filter>
        <filter-name>loginfilter</filter-name>
        <filter-class>org.westos.demo01.LoginFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>loginfilter</filter-name>
        <url-pattern>/sys/*</url-pattern>
    </filter-mapping>
  • login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>登陆</h1>
<form action="servlet/login"method="get">
    用户名: <input type="text" name="username"><br>
    <input type="submit">
</form>

</body>
</html>
  • error.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>登陆失败</h1>
<a href="/login.jsp">重新登陆</a>
</body>
</html>
  • success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>登陆成功</h1>
<a href="/servlet/logout">注销</a>
</body>
</html>
相关标签: filter 过滤器

推荐阅读