学习了Java 中的过滤器,了解到过滤器执行的三个步骤:
1: 可以每次在浏览器访问服务器的时候提前进行一次预处理
2:调用下一个过滤器或者网页
3:离开目标资源/响应后再进行一次处理。
问题出现:
我的项目可以登陆、查询数据库的数据、显示登陆成功的信息
由于有一些缺陷:可以根据url访问登录后的数据信息,所以需要添加过滤器,来判断是否登陆,只有登陆了有了User信息才能访问其他的页面,设置了过滤器之后,发现只有登陆成功后的第一个页面可以正常访问,点击其他的直接跳转到登陆页面。
自查后考虑过后,觉得问题出现在这里:
我每个功能后面都添加了request.setAttribute("User",user);但是每次执行过滤器 中的条件 request.getAttribute("User")
都判断了User为空,所以跳转到了登陆界面。
总结了一下:
因为页面还没有执行,所以每个功能的request.setAttribute()的语句根本还没有执行,过滤器就已经开始进行判断了。
这个时候我们需要考虑到Session,Session是可以在同一个服务器下进行数据共享的,所以过滤器只需要判断:
request.getSession().getAttribute("User"),只要通过Session来进行判断,并且登陆成功的第一个功能里设置
request.getSession().setAttribute("User",user)这样就能够实现只要登陆了,session便能够存储用户,只要浏览器未关闭,Session便一直存在。