过滤器的相关概念

Filter是什么

  Filterjava下的一种过滤器 ,能实现对java web程序 客户端和服务器端消息的过滤,也就是在服务器段接受request之前,可以预先对request进行处理,或在客户端接受response之前,对response进行处理。开发人员能够通过这种技术,对一些资源进行管控,能够对网页请求,文件等进行拦截,是一种保证系统安全的技术。

运行机制

  服务器在接收到来自浏览器的请求之后,在servlet处理请求之前,要先经过层层Filter的过滤。这样能够保证它request到达servlet之前预处理request等。

生命周期

  在web项目中,Filter是一个接口,我们所实现这个接口之后,会有三个需要重写的方法。
(1)init(FilterConfig filterConfig) throws ServletException
  Web 容器调用 init(FilterConfig) 来初始化过滤器。容器在调用该方法时,向过滤器传递 FilterConfig 对象,利用 FilterConfig 对象可以得到 ServletContext 对象,以及在 web.xml 中配置的过滤器的初始化参数。在这个方法中,可以抛出 ServletException 异常,通知容器该过滤器不能正常工作。此时的 Web 容器启动失败,整个应用程序不能够被访问。 实例化和初始化的操作只会在容器启动时执行,而且只会执行一次。

(2)doFilter(ServletRequest,ServletResponse,FilterChain)
  doFilter 方法类似于 Servlet 接口的 service 方法。当客户端请求目标资源的时候,容器会筛选出符合 filter-mapping 中的 url-patternfilter,并按照声明 filter-mapping 的顺序依次调用这些 filterdoFilter 方法。在这个链式调用过程中,可以调用 chain.doFilter(ServletRequest, ServletResponse) 将请求传给下一个过滤器(或目标资源),也可以直接向客户端返回响应信息,或者利用 RequestDispatcherforwardinclude 方法,以及 HttpServletResponsesendRedirect 方法将请求转向到其它资源。需要注意的是,这个方法的请求和响应参数的类型是 ServletRequestServletResponse,也就是说,过滤器的使用并不依赖于具体的协议。

(3)destroy()
  destroy 方法指示过滤器的生命周期结束。在这个方法中,可以释放过滤器使用的资源。

过滤实现

  长时间打开一个网页不进行操作会出现登录失效的情况,此时要是没有拦截功能,那么会出现在未登录的情况下还能进行操作。
  我们先创建登录成功后要访问的Servlet,也就是login.jsp中给出认证之后要访问的页面。

success: function(msg){if("vcodeError" == msg){....} else if("loginError" == msg){....} else if("admin" == msg){window.location.href = "SystemServlet?method=toAdminView";} else if("student" == msg){window.location.href = "SystemServlet?method=toStudentView";} else if("teacher" == msg){window.location.href = "SystemServlet?method=toTeacherView";}
}

  浏览器就可以根据这个消息跳转到管理员登录成功之后应该去的页面。

public class SystemServlet extends HttpServlet {private static final long serialVersionUID = -7258264317769166483L;public void doGet(HttpServletRequest req,HttpServletResponse res) throws IOException{doPost(req,res);}public void doPost(HttpServletRequest req,HttpServletResponse res) throws IOException{res.getWriter().write("hello");}
}

  从上面的代码中可以看出来,登录成功后会跳转到SystemServlet
  同样,我们仍然要在web.xml进行配置,建立SystemServlet到访问路径的映射。

<servlet><description>登录后的主界面显示</description><servlet-name>SystemServlet</servlet-name><servlet-class>com.ischoolbar.programmer.servlet.SystemServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>SystemServlet</servlet-name><url-pattern>/SystemServlet</url-pattern>
</servlet-mapping>

  这样配置之后,我们登录成功之后,浏览器会给我们响应,并且打印出“hello”于浏览器页面中。

  完成了Servletxml,接下来就可以创建对登录的拦截功能了。我们的需求是,用户在登录失效的情况下,重新定向到登录页面,登录之后再继续对系统进行操作。
  我们新建一个package,取名为filter,再在此包下创建一个名为LoginFilterjava文件。

public class LoginFilter implements Filter {@Overridepublic void destroy() {// TODO Auto-generated method stub}@Overridepublic void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)throws IOException, ServletException {// TODO Auto-generated method stubHttpServletRequest request = (HttpServletRequest)req;HttpServletResponse response = (HttpServletResponse)res;Object user = request.getSession().getAttribute("user");if(user == null){//未登录response.sendRedirect("index.jsp");return;}else{chain.doFilter(request, response);}}@Overridepublic void init(FilterConfig arg0) throws ServletException {// TODO Auto-generated method stub}
}

  上面的程序中,显示对ServletRequestServletRequest进行强转。
  在这里我的理解是:ServletRequestHttpServletRequestServletRequestHttpServletResponse 都是接口。而后者又是前者的子接口,子接口中实现的方法是父接口所没有的,我们想要从Session中获取信息,父接口没有其实现的方法,只能向下转型使用子接口实现的方法。

  另外,如果没有将用户信息从Session中拿出来,这说明用户是未登录的状态,就重新定向到了登录页面。
  我们来验证一下:

  从结果来看,过滤器已经发挥了作用。

学生信息管理系统----登录拦截功能相关推荐

  1. PHP+MySQL实现学生信息管理系统登录功能(附带源码)

    文件目录 包括学生登录界面和管理员登录界面 由于功能相同 只展示管理员登录界面 index.html文件 <!DOCTYPE html><html lang="en&quo ...

  2. 学生信息管理系统----登录实现

    登录功能 创建Servlet   在名为servlet的package下创建一个名为LoginServlet的类. public class LoginServlet extends HttpServ ...

  3. 学生信息管理系统----登录后的主界面设计

    登录成功后页面的跳转   这一部分基本是在处理JSP页面,但是也有部分需要修改的后端代码.   便于后续对JSP操作,本部分操作会新增两个JSP页面,即我们登录通过过滤器之后要访问的页面,system ...

  4. 复习Java第一个项目学生信息管理系统 04(权限管理和动态挂菜单功能) python简单爬数据实例Java面试题三次握手和四次挥手生活【记录一个咸鱼大学生三个月的奋进生活】016

    记录一个咸鱼大学生三个月的奋进生活016 复习Java(学生信息管理系统04权限管理和动态挂菜单功能) 改写MainFrame的构造方法 新增LoginFrame的验证登录是否成功的代码 新增Logi ...

  5. c语言·学生信息管理系统{功能丰富}

    这是一个学生信息管理系统的项目 功能 1.browse--浏览 将文件中的内容打印到终端上 2.search--搜索 学号搜索(输入想要搜索的学号,出现对应学号的学生的全部信息) 姓名搜索 3.ins ...

  6. Java SpringMVC毕业项目实战-学生信息管理系统

    目录 摘要设计: 系统功能概述: B站视频演示:java毕业设计-SSM学生信息管理系统.mp4 主要功能截图: 主要数据库设计: 论文结构目录设计 : 获取完整源码: 摘要设计:文末获取源码联系 本 ...

  7. Javaweb学生信息管理系统(Mysql+JSP+MVC+CSS)

    项目源码及数据库: 链接:https://pan.baidu.com/s/1ktUyxbOI9lljWr-HRTRIiQ?pwd=1024 提取码:1024 目录 一.项目介绍 二.运行效果 1.登录 ...

  8. C语言学生信息管理系统第二版(附带密码登录模式)

    这几天准备复习一下学习的C语言,进行一门语言最好的复习方式我认为就是用这门语言做一个作品出来,这样可能方方面面的知识都有可能用到,于是我花了几天写了一个学生信息管理系统,这是第二版操作系统,我又增加了 ...

  9. wxpython+MySQL实现学生信息管理系统

    初学者,仅供学习交流 Python学习两周时间了,这是我目前编写的比较满意的一个程序,有以下几个方面的经验总结: 1.布局管理是可视化编程的基础思维,尽量避免定点式布局,不规则分布的各种控件可以局部先 ...

最新文章

  1. Linux 内核调试必备工具
  2. http、https比较
  3. 中国国际智能产业博览会-2018-08-23至25 重庆国际博览中心举行
  4. 项目进度管理:规划项目进度管理
  5. boost::hana::flip用法的测试程序
  6. 重磅! flutter视图局部更新
  7. linux缓冲设备,Linux设备驱动程序缓冲策略
  8. paip.提高稳定性---自动检测sleep mysql数据库死连接以及kill
  9. windows bat 批处理常用命令
  10. 北理乐学大学计算机实验4,北理乐学C语言答案.docx
  11. 气象报告是什么计算机领域,计算机辅助翻译系统在亚运气象服务方面的应用报告...
  12. 网络处理器(NP)与图形处理器(GPU)
  13. 【预测模型】基于粒子群算法优化最小二乘支持向量机lssvm实现预测matlab源码
  14. 博仲兴业力作——《爱的雨季》讲述爱情的奥秘
  15. WMS系统开发总结-移库管理-下架与上架
  16. 天玑800u处理器怎么样,相当于骁龙的多少
  17. C语言如何打开shx文件,shx文件怎么打开?Win7打开shx文件的操作方法
  18. Springboot 实现api校验和登录验证
  19. 阿里巴巴erp【商业化操作系统】什么是erpadmin
  20. 医学图像分割之TransUNet

热门文章

  1. Java自学需要学多久?学习路线是怎样的?别慌这里都整理好了
  2. java就业前景很好:四大就业方向可供选择
  3. 对讯时新闻发布系统的艰难突破
  4. C#与三菱PLC MC协议通信,Java与三菱PLC MC协议通信
  5. 【计算机网络】一概述
  6. How Brands Grow
  7. 一千万数据,怎么快速查询?
  8. 共享停车app化解停车难题!
  9. PPT 为曲线添加箭头
  10. 服务器常见问题汇总(常见故障及相应的解决方法入口)