【JavaWeb】过滤器类的编写与使用

一、过滤器类——Filter

Filter过滤器是JavaWeb的三大组件之一。
三大组件分别是:Servlet程序、Listener监听器、Filter过滤器。

Filter过滤器它的作用是:拦截请求,过滤响应。

拦截请求常见的应用场景:1、权限检查 2、日记操作 3、事务管理 ......等等。

在我看来,Filter类的作用有点接近Servlet类,Servlet类是响应访问相关路径时的请求程序行为,而Filter类是在访问特定一个或特定一类路径时,程序自动响应的行为。

再说到程序上的不同时,Servlet类有不同的响应方法,如post、get、service等,根据请求类型不同而调用不同的方法。而Filter类只有三个方法:初始化、do、销毁,执行Filter类时,主要的行为都在do方法内。除此之外,Servlet类除了可以在程序中写请求路径注解还可以在web.xml中写请求路径名和对应Servlet类建立映射,通过路径名即可向响应Servlet发出请求。而Filter过滤器类则是在web.xml中写过滤的网页路径,可以是特定网页,也可以是一个文件夹下的所有网页,访问此类网页时则会自动运行Filter过滤器类,执行过滤器的程序。

接下来,就要简要说到如何构建一个过滤器Filter类。

二、构建过滤器Filter类

(一)在项目的src/main/java程序文件夹内,建立filter包。

(二)在filter包内建立过滤器类,例如权限检查作用的过滤器类,自定义命名为AuthorityFilter。

(三)编写过滤器类程序。

下方程序的作用是,从本地会话中获取保存的权限值(这个是在登陆时的调用的Servlet类进行保存到本地会话中的),判断权限值是否能访问管理网页。若是权限值不匹配,则无法进入管理网页,跳转到显示权限不足的网页。若是无法获取权限值,则说明未登录,跳转到登录页面。

package cn.edu.lingnan.filter;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

//功能:admin目录只允许管理员访问,普通用户无权访问
public class AuthorityFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void destroy() {

    }

    /**
     * 依据用户的权限设置访问权限
     * @param servletRequest
     * @param servletResponse
     * @param filterChain
     * @throws IOException
     * @throws ServletException
     */
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
        //判断用户权限是否为1,第一步要拿到权限值
        HttpServletRequest req = (HttpServletRequest) servletRequest;
        HttpServletResponse resp = (HttpServletResponse) servletResponse;
        HttpSession session = req.getSession();
        Integer user_right = (Integer) session.getAttribute("user_right");
        System.out.println("[Debug]权限过滤器中的用户的权限值为"+user_right);
        if(user_right!=null){//用户已登录
            if(user_right == 1){//用户为管理员
                //调用FilterChain接口的doFilter方法,表明该过滤器过滤完无问题,交给下一个过滤器类处理。
                //如果当前调用此方法的Filter对象是Filter链中的最后一个Filter,那么将把请求交给目标Servlet程序去处理。
                filterChain.doFilter(req,resp);
            }else {//用户非管理员
                resp.sendRedirect("/authority.jsp");
            }
        }else {//用户未登录
            resp.sendRedirect("/index.jsp");
        }
    }
}

(四)在web.xml中配置Filter

    <filter>
        <filter-name>AuthorityFilter</filter-name>  <!--  自定义名称(要对应filter-mapping)  -->
        <filter-class>cn.edu.lingnan.filter.AuthorityFilter</filter-class>  <!--  过滤器类的路径位置  -->
    </filter>
    <filter-mapping>
        <filter-name>AuthorityFilter</filter-name>  <!--  自定义名称(要对应filter) -->
        <url-pattern>/admin/*</url-pattern>  <!--  过滤器类过滤的网页路径  -->
    </filter-mapping>

(五)构建完成,运行查看效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ヌヌ イホ キT エ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值