其中最重要的就是filter功能.它使用户可以改变一个request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在response离开servlet时处理response.换种说法,filter其实是一个“servlet chaining“(servlet 链) 1 权限检查 需求 : 用户登录有什么特性? 怎么识别用户登录? 但是,以上这种方法,仅仅是适用于jsp页面.而无法在html页面和jpg图片上使用. web.xml中的配置: login.jsp页面: 第 1, 2 步,是在web工程启动的时候调用. 在web工程停止的时候调用. FilterConfig和ServletConfig非常像. FilterConfig是Tomcat服务器每次创建Filter过滤器的时候,也会创建一个FilterConfig对象实例. web.xml中的配置: FilterChain 是过滤器链 ( 多个Filter过滤器 ) –精确匹配 –目录匹配 –后缀名匹配 Filter的拦截请求地址,只关心地址的字符串是否匹配,不关心请求的资源是否存在!!! JavaEE的三大组件,不仅可以在web.xml中进行配置,也可以使用注解来进行配置. 我们为问答用户新建了一个QQ交流群:1101584918,欢迎大家加入。
1.Filter 什么是过滤器
常见的应用场景是:
2 日记记录10-
3 性能检测
… 等等2.Filter的Hello示例
现在比如在web目录下有一个admin目录.这个admin目录下存放着.jsp页面,html页面.jpg图片等地很多资源.
而这些资源都要求用户登录之后才允许访问.
思路 : 我们可以在jsp页面中通过session域对象检查是否有保存用户登录的信息.如果有说明用户之前登录过.如果没有说明用户还没有登录.<% // 获取Session域中用户登录的信息 Object user = session.getAttribute("user"); // 判断是否已经登录 if (user == null) { request.getRequestDispatcher("/login.jsp").forward(request,response); return; } %>
这种情况下,我们就可以使用Filter过滤器来实现这个权限拦截检查.3.Filter过滤器工作示意图:
4.如何使用Filter过滤器:
public class AdminFilter implements Filter { /** * doFilter() 方法专门用于拦截请求,过滤响应( 权限检查 ) * 每次拦截到资源的请求后,就会调用的方法.在这里可以做一些检查工作. * @param request * @param response * @param chain * @throws IOException * @throws ServletException */ @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("AdminFilter工作了"); // 强转为子接口 HttpServletRequest httpServletRequest = (HttpServletRequest) request; // 获取Session域中用户登录的信息 Object user = httpServletRequest.getSession().getAttribute("user"); // 判断是否已经登录 if (user == null) { // 没有登录.你可以任意指定程序的流转 ===>>> 比较让它跳到登录页面 request.getRequestDispatcher("/login.jsp").forward(request,response); } else { // 放行 ===>>> 让程序去执行用户访问的资源 chain.doFilter(request,response); } } }
<!--配置Filter过滤器和配置Servlet程序几乎一样--> <!--filter标签是配置Filter过滤器--> <filter> <!--filter-name标签是起一个别名--> <filter-name>AdminFilter</filter-name> <!--filter-class标签配置Filter过滤器的全类名--> <filter-class>com.atguigu.filter.AdminFilter</filter-class> </filter> <!--还要使用filter-mapping配置Filter的拦截路径--> <filter-mapping> <!--表示当前配置的路径给哪个Filter使用--> <filter-name>AdminFilter</filter-name> <!-- url-pattern 是配置拦截路径 / 表示: http://ip:port/工程路径/ 映射到代码的WEB目录 /admin/* 表示地址为: https://ip:port/工程路径/admin/* 所有资源 --> <url-pattern>/admin/*</url-pattern> </filter-mapping>
public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取用户名和密码 String username = request.getParameter("username"); String password = request.getParameter("password"); // 比较用户名和密码是否正确 if ("admin".equals(username) && "666666".equals(password)) { request.getSession().setAttribute("user", username); System.out.println("登录成功"); } else { System.out.println("登录失败"); } } }
5.Filter的生命周期
FilterConfig 类
ServletConfig是Servlet程序在Tomcat服务器创建Servlet程序的时候,就会创建一个ServletConfig对象实例.
Servletconfig对象实例是封装有Servlet程序的配置信息类
这个FilterConfig对象实例中也封装有Filter过滤器的配置信息.6.FilterConfig类的作用:
@Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("2 init() 初始化方法"); //FilterConfig类的作用: //1 获取在Filter配置的别名 System.out.println(filterConfig.getFilterName()); //2 获取Filter过滤器的初始化参数 init-param System.out.println(filterConfig.getInitParameter("url")); System.out.println(filterConfig.getInitParameter("myLove")); //3 获取ServletConetxt对象 System.out.println(filterConfig.getServletContext()); }
<init-param> <param-name>url</param-name> <param-value>jdbc:mysql://localhost:3306/book</param-value> </init-param> <init-param> <param-name>myLove</param-name> <param-value>1.jpg</param-value> </init-param>
7.FilterChain 过滤器链
Filter 过滤器
Chain 链 锁链
8.设置Filter的拦截路径
<url-pattern>/target.jsp</url-pattern>
以上配置要求请求地址必须是:https://ip:port/工程路径/target.jsp
才会拦截到
<url-pattern>/admin/*</url-pattern>
以上配置要求请求地址必须是: https://ip:port/工程路径/admin/所有资源
<url-pattern>*.jsp</url-pattern>
以上配置要求请求地址必须是以 .jsp结尾 , 请求才会被拦截到
<url-pattern>*.html</url-pattern>
以上配置要求请求地址必须是以 .html 结尾 , 请求才会被拦截到
<url-pattern>*.do</url-pattern>
以上配置要求请求地址必须是以 .do 结尾 , 请求才会被拦截到
<url-pattern>*.abc</url-pattern>
以上配置要求请求地址必须是以 .abc 结尾 , 请求才会被拦截到9.JavaEE3.0规范注解@Filter配置Filter过滤器
注意 : 如果是使用注解的方式配置多个Filiter过滤器.他们的执行顺序由类名的字母顺序决定.
如果博客对你有帮助,不妨点个赞,一下?转载请注明出处。感谢!
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算