Java日记之Filter过滤器处理登录问题

(试一试新出的模板)


前言

想象一个情景,我们在浏览淘宝网页的时候,在没有登录的情况下,我们点击收藏某商品,或者是执行一个购买操作,这时马老板会亲切地给我们弹出一个登录界面,提示我们未登录无法执行上述操作.如果对这非常熟悉,好了,那你就成功一半了

一、过滤器是什么?

过滤器,filter,是一种能够拦截请求,并且规定过滤规则的程序,往往先于与之相关的JSP或servlet. 做个不太恰当的比方,有点类似于AOP技术中的前置通知.在执行某一方法前,会自动进行一次其它的操作,比如说验证用户是否登录

二、使用步骤

1.创建filter

我们应该把filter文件专门建在一个存放过滤器的包下
创建的filter文件,会默认实现一个Filter接口,这个接口是由tomcat提供的
系统默认会给出一个构造器,一个初始化方法,一个销毁方法,和一个doFilter方法,当filter拦截到请求时,就会执行doFilter方法来限制或允许用户做登录

生命周期 : 在服务器/容器启动时创建,在服务器容器关闭时销毁

2.拦截

根据过滤条件过滤.即在web.xml中生成的标签里,<url-pattern></~>就是过滤条件
当我们试图在地址栏中以http://localhost:8888/Filter/LoginFilter方式进入时,系统发现session为空,也就是还没有登录的时候,会依据doFilter()方法中规定的重定向目标地址来跳转我们的网页

同时我们要把登录以后才能看到的那一部分页面放在同一个文件夹下
doFilter()定义HttpServletRequest,HttpServletResponse对象,
用req接收request传来的值,如果没有传值,那么就要res重定向到登录界面
;如果传值了,就进入页面

注 : 1.HttpServletRequestHttpServletResponse与doFilter()方法中给出的参数ServletResponseServletRequest是父子类的关系,因此在下面的代码中,我们需要对原有的形参进行强制类型转换
2.获取文件根目录: req.getContextPath()
3.getSession()方法,我们看看它的官方解释👇:
Returns the current session associated with this request,or if the request does not have a session, creates one.

filter代码如下:

public void doFilter(ServletRequest request, 
ServletResponse response, FilterChain chain) 
throws IOException, ServletException {
   
		// TODO Auto-generated method stub
		// place your code here
		HttpServletRequest req = (HttpServletRequest)request;
		HttpServletResponse res = (HttpServletResponse)response;
		
		System.out.println("doFilter...");	
		
		Object obj = req.getSession().getAttribute("username");
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值