Servlet & Jsp 动态网站开发_7. 过滤器 & 监听器

一、过滤器

上一篇我们说了登录,但是这个还是不行,我们现在的这个可以直接绕过登录,直接请求 success.jsp 也是可以的,说明这个登录根本没有什么用,如果是 success.jsp 里面有一些重要的东西,那只要是个人都可以去看,这个就不好了

所以,我们引入一个东西,叫过滤器,我们把没有登录的用户进行拦截,让他们看不到,登录的人呢,就可以看

过滤器呢,实际上是一个接口,因为过滤的内容不同,肯定会有许许多多的过滤器,这个就和污水排放类似,我们来看一个图

可以看到啊,这个污水排放需要经过层层流程,过滤,最后出水

我们的程序也是一样,需要有多种过滤器,我们就弄个简单的登录过滤器,感受一下

首先我们创建一个 LoginFilter,这个就是我们登录过滤器

然后让这个类实现一个接口,也就是我们的 Filter 接口

这里注意导入的包,不要导错了,是 javax 下面的,不要搞成别的!!!

扫描二维码关注公众号,回复: 12626367 查看本文章

这里的 request 和 response 和我们之前使用的 HttpServletRequest / Response 是不同的,不要搞混了!!

后面的 FilterChain 是一个过滤器链,如果还有其他的过滤器链,它会继续往下执行,具体的执行,大家可以自己去研究~

然后我们可以看到很熟悉的内容,init 是初始化,destory 是销毁,这两个我们不需要管,我们只需要看中间的 doFilter,这个是我们要来写的

首先第一步,我们获取一下登录人的信息,如果登录了,那么我们就不管他了,如果没有登录,那么我们需要让这个人去登录

废话不多说,直接上代码

这里的这个强转是没有问题的,大家可以放心执行,然后获取 session 中的这个 user 属性,这里我们需要他登录成功后,给他弄个这个 user 属性,现在我们项目中没有,我们一会去加上它

然后判断一下,如果这个 user 是空,我们就让他去登录,如果不是,就继续往下执行~

接着,我们再去 web.xml 配置一下,不然这个东西不生效,配置的方式和 Servlet 很类似,只不过标签名称不一样而已

我们弄个登录的 loginFilter,然后让它作用在所有的请求上,也就是说,所有的请求都会进入到我们的这个过滤器中,这也和上面的废水处理厂中的水是一样的,不管从哪里来的水,都得进行第一步处理~

接着我们修改一下 LoginServlet,登录成功后向 session 中添加一个 user 的属性

然后我们启动项目测试一下,看看那里有问题

可以看到啊,这个 login.jsp 还是可以进入的,我们现在进入 success.jsp 这个页面

可以看到这个地址 success.jsp ,但是却显示的登录,我们现在输入账号密码进行登录

可以看到登录之后,我们还是在这个登录页面,这个是怎么回事?

其实是这样的,我们再请求 success.jsp 的时候,被我们的过滤器过滤出来了,因为没有登录,所以被过滤器弄到了我们的登录页面

然后我们输入账号密码之后再进行登录的时候,我们又进入了过滤器中,因为我们还是获取不到登录信息,所以又被过滤器弄出来了,这样,就变成了死循环,我们永远都登录不了

所以,我们需要将登录的这个请求放开,如果请求的是登录,我们让过滤器不要管,如果不是,再进行转发到登录页面

如果 没有登录,而且不是请求的 /login,直接我们让他跳转到/login

我们再来测试一下

OK的啊~~

二、监听器

监听器呢,主要是来监听数据变化的,就好比上面的用户登录,我们就可以监听到当前是谁登录的

我们呢,先来往数据库添加一条数据

然后,我们一会进行不同用户登录,我们来看看监听器是否监听到谁登录了

然后我们去创建一个监听器:LoginListener,然后让他实现 HttpSessionAttributeListener这个接口

因为我们的登录信息是存储在 session,所以我们需要监听 session 的 Listener,如果是 request 或者是 application,我们需要实现其他的接口

如果要监听 request ,我们需要实现 ServletRequestAttributeListener

如果要监听 application,我们需要实现 ServletContextAttributeListener

然后我们怎么监听呢?

先来说一下这三个方法,一个是 session 中的属性添加的时候,我们进行监听一下,removed 是移除的时候我们监听,replaced 是替换的时候监听~

我们可以往里面加点代码,然后我们来进行配置,同样啊,这东西不配置,也是不起作用~

配置到 web.xml 中之后,我们可以从新启动一下服务器,我们来看看效果

我们可以看到,登录之后,我们这个监听有了作用,现在我们再去登录也面,登录一下 user

可以看到啊,这次是替换,并不是添加!!!

如果我们想要移除,我们就需要清理掉 session 中 user 的属性,这里我就不写了,留给大家去写~~~

大家可以自己好好查查看,有不懂的可以联系我 QQ:2100363119

欢迎大家访问我的网站:https://www.lemon1234.com

可以的话关注一下我的公众号,就在我网站,每天都有更新~~~,无限资源畅游 Java,感谢~

最近小程序也开放了,大家可以扫码进行玩玩看

猜你喜欢

转载自blog.csdn.net/weixin_45908370/article/details/113097311