Filter过滤器是JavaWeb的三大组件之一。

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

Filter过滤器它的浸染是:拦截要求,过滤相应。

jsp管理员过滤器JavaWeb过滤器类的编写与应用 GraphQL

拦截要求常见的运用处景: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>

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