Servlet中过滤器Filter的使用

您所在的位置:网站首页 filter用法举例 Servlet中过滤器Filter的使用

Servlet中过滤器Filter的使用

2024-07-07 14:32| 来源: 网络整理| 查看: 265

Servlet中过滤器Filter的使用

1.Filter过滤器简介 在Servlet中,有时我们需要Filter来进行对信息的过滤,比如在一个管理系统中,我们可以设置过滤器来过滤没有登录的用户访问主页以提高系统的安全性。

2.过滤器的优点:

过滤器是可插拔的,我们不需要某个过滤器时,直接删掉不会影响程序的运行。一个过滤器不依赖于另一个资源维护少,容易维护

3.过滤器的创建

要创建一个过滤器,必须实现Filter接口 Filter接口为过滤器提供了声明周期方法: 在这里插入图片描述 2.以下是创建一个过滤器的代码:实现Filter接口,注意:导入的包是import javax.servlet.*; package com.gzx.filter; import javax.servlet.*; import java.io.IOException; public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { } @Override public void destroy() { } }

init:接口初始化时会执行。 doFilter:相当于是一个拦截器,如果用户的操作不满足方法里面的要求,那么我们可以对它进行操作,如一个用户没有登录而访问了后台系统。我们可以进行如下操作:

// 用户没有登录 if (session.getAttribute("sessionUser") == null) { // 1.不需要登录的请求不拦截 String resource = uri.substring(uri.lastIndexOf("/") + 1); // System.out.println(uri.substring(uri.lastIndexOf("/") + 1)); // 不需要登录就可以访问的资源 if ("login.jsp".equals(resource) || "login".equals(resource)) { chain.doFilter(request, response); } else if (uri.contains("/api/get") || uri.contains("/api/post")) { chain.doFilter(request, response); } // 不合法的请求 用户没有登录 却访问了一个需要登录以后才可以访问的系统资源 这时候重定向到登录页面 让用户登录 else { // 重定向到系统登录页面 response.sendRedirect("login.jsp"); } } // 用户已经登录了 继续下面的请求 else { chain.doFilter(request, response); }

注意,当用户的操作已经满足要求,那么我们要执行一行代码: chain.doFilter(request, response); 这行代码相当于放行的意思,取消拦截,我们可以把 网页的request和response传到下一个页面。

3.Filter的配置!

上面是Filter的创建,那么接下来是Filter的注册,如果没有进行注册的话,我们的程序是无法识别并找到你所写的Filter的,下面我提供2种配置方法

1.通过配置web.xml文件:我们需要配置filter和filter-mapping两个选项

myFilter com.gzx.filter.MyFilter myFilter ...

2.当然还有一种特别简便的方法,此方法我们不需要配置web.xml文件即可对Filter进行注册:通过注解。

在这里插入图片描述 在我们刚才创建的Filter中加上这一句@WebFilter("/*")即可对Filter进行配置。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3