过滤器 Filter含页面权限实现案例(javaweb)

过滤器 Filter(javaweb)

1. 过滤器的作用

在这里插入图片描述

2. 使用步骤
  1. "创建普通的java类" 或者 "直接创建Filter类型的文件"
    ​ 两者不同之处在于:普通的java类需要自己手动来实现Filter接口以及Filter接口的三个方法(init()、destory()、doFilter()
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  2. 配置web项目的web.xml(这里也和Servlet的配置方法相似)

在这里插入图片描述

​ 注:配置需要拦截的资源的几种方式:

​ 以指定资源匹配,如:“/login.jsp

​ 以目录匹配,如:“/servlet/*

​ 以后缀名匹配,如:“.jsp

​ 通配符匹配,拦截所有web资源,如:“/*

其他配置(dispatcher是个枚举类型,有下面几个值可以选择,默认为REQUEST)

在这里插入图片描述

3.案例实现:

​ 当我们在访问CSDN博客的时候,会发现没有登陆,就不能够访问个人主页,只有登陆过才可以访问个人主页。

​ 现在我们就来模拟下这个功能。(上述的 “个人主页” 由下面的 “登陆成功页面” 代替)

​ 实现拦截用户的非法请求 : “当客户端直接发送请求访问loginSuccess.jsp(登陆成功页面)时,需要拦截该请求,给用户再次显示login.jsp(登陆页面)。”

1). 执行效果:

成功实现拦截用户直接访问登陆成功页面(loginSucccess.jsp)
在这里插入图片描述

2). 实现核心源代码如下:

Filter过滤器部分源代码:

public class pageFilter implements Filter{

    //Filter过滤器的doFilter()方法
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
				throws IOException, ServletException {
        HttpServletRequest hreq = (HttpServletRequest)request;
		HttpServletResponse hres = (HttpServletResponse)response;
		HttpSession session = hreq.getSession();
		//hreq.getContextPath()得到:/项目名
		String path1 = hreq.getContextPath() + "/login.jsp";
		String path2 = hreq.getContextPath() + "/register.jsp";
		
		if(session != null && session.getAttribute("user") != null){
            //session中存在用户信息时,说明已成功登陆过,过滤器放行
			chain.doFilter(request, response);
		}else if(path1.equals(hreq.getRequestURI()) || path2.equals(hreq.getRequestURI())){
            //访问地址合法时,过滤器放行
			chain.doFilter(request, response);
		}else{
			//否则就拦截,跳转至登录页面
			System.out.println("请求不合法,Filter已拦截请求...");
			hres.sendRedirect(hreq.getContextPath() + "/login.jsp");
		}
	}
}

配置文件:

<filter>
		<filter-name>filterOne</filter-name>
		<filter-class>filter.pageFilter</filter-class>
 </filter>
 <filter-mapping>
		<filter-name>filterOne</filter-name>
		<url-pattern>/*</url-pattern>
 </filter-mapping>

*注:在运行项目的时候,可以看到Tomcat启动的时候,就会创建Filter,常驻内存。也就是说服务器一启动就会执行Filter的init( )方法;当服务器关闭的时候,就会执行Filter的destory( )方法。
在这里插入图片描述

4. 多个Filter的执行顺序

​ 1). 在web.xml中,filter执行顺序跟的顺序有关,先声明的先执行。

​ 2). 使用注解配置的话,filter的执行顺序跟名称的字母顺序有关。

​ 3). 如果既有在web.xml中声明的filter,也有通过注解配置的filter,那么会优先执行web.xml中配置的filter。

5.过滤器 和 Servlet相似:
都需要“请求对象:request" 和 “响应对象:response”

在这里插入图片描述

其中,HttpServletRequest(Servlet)ServletRequest(Filter) 都是接口。HttpServletRequest继承自ServletRequestHttpServletRequestServletRequest多了一些针对于Http协议的方法。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值