本篇内容介绍了“JavaWeb中的Filter过滤器怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
1.Filter过滤器的作用:拦截请求
2.拦截请求常见场景:
(1)权限检查
(2)日记操作
(3)事务管理
Filter 过滤器的使用步骤:
1、编写一个类去实现Filter 接口
2、实现过滤方法doFilter()
3、到web.xml 中去配置Filter 的拦截路径
web工程下新建一个admin目录,作为需要权限才能访问的目录,其中有两个文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>导航</title>
</head>
<body>
<table>
<tr>
<td>
百度<input type="text">
</td>
</tr>
<tr>
<td>
Google<input type="text">
</td>
</tr>
<tr>
<td>
必应<input type="text">
</td>
</tr>
</table>
</body>
</html>
package com.filter.filter;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/**
* @author ningqian
* @create -05-16 20:17
*/
//注意导包是javax
public class FilterServlet implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("来到Filter过滤器");
HttpServletRequest httpServletRequest = (HttpServletRequest)servletRequest;
HttpSession session = httpServletRequest.getSession();
//如果session的属性user为空,转发到首页
if(session.getAttribute("user")==null){
servletRequest.getRequestDispatcher("/index.jsp").forward(servletRequest,servletResponse);
}
else{//如果session的属性user不为空,则放行
filterChain.doFilter(servletRequest,servletResponse);
}
}
@Override
public void destroy() {
}
}
package com.filter.filter;
import java.io.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
@WebServlet(name = "helloServlet", value = "/hello-servlet")
public class HelloServlet extends HttpServlet {
private String message;
public void init() {
message = "Hello World!";
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/html");
// Hello
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h2>" + message + "</h2>");
out.println("</body></html>");
HttpSession session = request.getSession();
session.setAttribute("user","ningqian");
}
public void destroy() {
}
}
<?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_4_0.xsd"
version="4.0">
<filter>
<filter-name>FilterServlet</filter-name>
<filter-class>com.filter.filter.FilterServlet</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterServlet</filter-name>
<!--表示受限的文件-->
<url-pattern>/admin/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.filter.filter.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
<?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_4_0.xsd"
version="4.0">
<filter>
<filter-name>FilterServlet</filter-name>
<filter-class>com.filter.filter.FilterServlet</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterServlet</filter-name>
<!--表示受限的文件-->
<url-pattern>/admin/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.filter.filter.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
1.启动服务器
2.在浏览器地址栏输入:http:localhost:8080/filter/admin/1.jpg
表示直接访问admin目录下的图片
由于此目录下的文件在web.xml中配置为受限,所以此时请求被FilterServlet收到,使用doFilter方法进行请求过滤检查,发现会话session中没有user属性,所以将该请求转发到index.jsp
3.在浏览器地址栏输入:http:localhost:8080/filter/
首页不在受限的目录下,所以可以直接访问,点击页面上的链接Hello Servlet,此时,将请求发到服务器,HelloServlet程序接收,通过doGet()方法,给会话session的user赋值
4.再次在浏览器输入:http:localhost:8080/filter/admin/1.jpg,此时就可以正常访问。
Filter 的生命周期包含几个方法
1、构造器方法
2、init 初始化方法
第1,2 步,在web 工程启动的时候执行(Filter 已经创建)
3、doFilter 过滤方法
第3 步,每次拦截到请求,就会执行
4、destroy 销毁
第4 步,停止web 工程的时候,就会执行(停止web 工程,也会销毁Filter 过滤器)
FilterConfig 类见名知义,它是Filter 过滤器的配置文件类。
Tomcat 每次创建Filter 的时候,也会同时创建一个FilterConfig 类,这里包含了Filter 配置文件的配置信息。
FilterConfig 类的作用是获取filter 过滤器的配置内容
1、获取Filter 的名称filter-name 的内容:filterConfig.getFilterName()
2、获取在Filter 中配置的init-param 初始化参数(在web.xml中配置):filterConfig.getInitParameter(“username”)
3、获取ServletContext 对象:filterConfig.getServletContext()
<!--filter 标签用于配置一个Filter 过滤器--> <filter> <!--给filter 起一个别名--> <filter-name>AdminFilter</filter-name> <!--配置filter 的全类名--> <filter-class>com.atguigu.filter.AdminFilter</filter-class> <init-param> <param-name>username</param-name> <param-value>root</param-value> </init-param> <init-param> <param-name>url</param-name> <param-value>jdbc:mysql://localhost3306/test</param-value> </init-param> </filter>
多个过滤器
Filter 过滤器它只关心请求的地址是否匹配,不关心请求的资源是否存在!!!
<url-pattern>/admin/*</url-pattern>
<url-pattern>*.html</url-pattern>
“JavaWeb中的Filter过滤器怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。