《Java Web应用开发项目教程_第七章教学课件.ppt》由会员分享,可在线阅读,更多相关《Java Web应用开发项目教程_第七章教学课件.ppt(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Java Web应用开发项目教程_第七章Java Web应用开发应用开发计算机与软件学院计算机与软件学院计算机与软件学院计算机与软件学院计算机与软件学院第7章 使用过滤器实现用户授权验证 本章要点:ServletServlet过滤器开发技术 用户授权验证功能模块设计与实现 ServletServlet过滤器技术特性分析 ServletServlet过滤器的典型应用计算机与软件学院计算机与软件学院计算机与软件学院计算机与软件学院7.1 使用Servlet过滤器实现用户授权验证功能 用户登录验证功能分析 SessionSession中留下相应的用户对象作为标识每个页面或ServletServlet
2、中都添加身份验证的代码显然会对编程造成很大的麻烦,也会增加多余的代码。而ServletServlet过滤器可以截取从客户端发送到服务器的请求,并作出处理答复。计算机与软件学院计算机与软件学院计算机与软件学院计算机与软件学院7.1 使用Servlet过滤器实现用户授权验证功能 过滤器应用控制流程如下图 计算机与软件学院计算机与软件学院计算机与软件学院计算机与软件学院7.1 使用Servlet过滤器实现用户授权验证功能 Servlet过滤器实现一创建过滤器SessionFilter,通过NEW命令创建一个Class文件,配置如下 计算机与软件学院计算机与软件学院计算机与软件学院计算机与软件学院7.
3、1 使用Servlet过滤器实现用户授权验证功能 ServletServlet过滤器实现二在doFilter方法中放入过滤行为:HttpServletRequest httpreq=(HttpServletRequest)request;HttpServletResponse httpres=(HttpServletResponse)response;HttpServletResponseWrapper wrapper=new HttpServletResponseWrapper(Http-ServletResponse)response);/通过配置参数对象config获取配置信息中的初始化
4、参数“loginstrings”(需要过滤的页面)String loginStrings=config.getInitParameter(logonStrings);/获取配置信息中的初始化参数“includeStrings”(需要过滤的页面!)String includeStrings=config.getInitParameter(includeStrings);/没有登录则需要重定向到的页面 String redirectPath=httpreq.getContextPath()+config.getInitParameter(redirectPath);计算机与软件学院计算机与软件学院
5、计算机与软件学院计算机与软件学院7.1 使用Servlet过滤器实现用户授权验证功能 ServletServlet过滤器实现三 调用FilterChain对象的 doFilter方法:chain.doFilter(request,response);计算机与软件学院计算机与软件学院计算机与软件学院计算机与软件学院7.1 使用Servlet过滤器实现用户授权验证功能 Servlet过滤器实现四 对相应的servlet和JSP页面注册过滤器。在部署描述符文件(web.xml)中使用filter和filter-mapping元素。计算机与软件学院计算机与软件学院计算机与软件学院计算机与软件学院7.1
6、.3 Servlet过滤器技术特性分析ServletServlet过滤器工作原理图 计算机与软件学院计算机与软件学院计算机与软件学院计算机与软件学院7.1.3 Servlet过滤器技术特性分析ServletServlet过滤器使用注意提示:在过滤器截获响应对象的时候,如果输出流被servletservlet关闭了,那么过滤器就不能够再改变输出流中的响应信息。在servletservlet的实现中,用刷新输出流,不能够关闭输出流。如:PrintWriter out=response.getPrintWriter();PrintWriter out=response.getPrintWriter(
7、);out.flush();/out.flush();/如果希望有过滤器截获并处理响应信息,此处不能用out.close()out.close()代替out.flush()out.flush()。计算机与软件学院计算机与软件学院计算机与软件学院计算机与软件学院7.1.3 Servlet过滤器技术特性分析Servlet过滤器链工件原理计算机与软件学院计算机与软件学院计算机与软件学院计算机与软件学院7.1.3 Servlet过滤器技术特性分析创建ServletServlet过滤器和实现其编程接口 1 1、建立一个实现FilterFilter接口的类public class SessionFilte
8、r public class SessionFilter implements Filterimplements Filter所有过滤器都必须实现javax.servlet.Filterjavax.servlet.Filter。这个接口包含三个方法,分别为doFilterdoFilter、initinit和destroydestroy。计算机与软件学院计算机与软件学院计算机与软件学院计算机与软件学院7.1.3 Servlet过滤器技术特性分析创建Servlet过滤器和实现其编程接口 2、将过滤行为放入doFilter方法 doFilter方法为过滤器的关键。每当调用一个过滤器时,都要执行doF
9、ilter。doFilter执行的步骤是基于传入的信息的。因此,要利用作为doFilter的参数提供的ServletRequest。常用的是HttpServletRequest类型计算机与软件学院计算机与软件学院计算机与软件学院计算机与软件学院7.1.3 Servlet过滤器技术特性分析创建Servlet过滤器和实现其编程接口 3 3、调用FilterChainFilterChain对象的doFilterdoFilter方法 FilterFilter接口的doFilterdoFilter方法以一个FilterChainFilterChain对象作为第三个参数。在调用该对象的doFilterdo
10、Filter方法时,激活下一个相关的过滤器。这个过程一般持续到链中最后一个过滤器为止。在最后一个过滤器调用其FilterChainFilterChain对象的doFilterdoFilter方法时,激活请求资源(ServletServlet或JSPJSP页面等)。计算机与软件学院计算机与软件学院计算机与软件学院计算机与软件学院7.1.3 Servlet过滤器技术特性分析创建Servlet过滤器和实现其编程接口 4 4、部署过滤器 过滤器是ebeb组件 部署描述符文件的两个用于过滤器的元素:filterfilter和filter-mappingfilter-mappingfilterfilter
11、:过滤器定义 元素中又包含两个必要的子元素和,用来定义过滤器的名称一与过滤器相关的javajava类的路径,还包含四个子元素、和 filter-mappingfilter-mapping:过滤器的映射配置 过滤器的映射配置可以利用过滤器映射到一个或多个ServletServlet和JspJsp文件中,也可以映射到任意的URLURL中计算机与软件学院计算机与软件学院计算机与软件学院计算机与软件学院7.2 servlet过滤器知识总结Servlet过滤器的优点 以一种模块化的或可重用的方式封装公共的行为 能够将高级访问决策与表现代码相分离 能够对许多不同的资源进行批量性的更改 提示:过滤器只在与s
12、ervlet规范2.3版兼容的服务器上有作用。计算机与软件学院计算机与软件学院计算机与软件学院计算机与软件学院7.3 字符编码过滤器package com.filter;public class EncodingFilter implements Filterprotected FilterConfig filterConfig;private String targetEncoding=gb2312;/初始化过滤器,和一般的Servlet一样,它也可以获得初始参数。public void init(FilterConfig config)throws ServletException thi
13、s.filterConfig=config;/从配置文件中获得字符编码格式 this.targetEncoding=config.getInitParameter(encoding);/销毁过滤器public void destroy()this.filterConfig=null;计算机与软件学院计算机与软件学院计算机与软件学院计算机与软件学院7.3 字符编码过滤器/进行过滤处理,这个方法最重要,所有过滤处理的代码都在此实现。public void doFilter(ServletRequest srequest,ServletResponse sresponse,FilterChain c
14、hain)throws IOException,ServletException System.out.println(使用以下方法对请求进行编码:encoding=+targetEncoding);HttpServletRequest request=(HttpServletRequest)srequest;/设置字符编码格式request.setCharacterEncoding(targetEncoding);/把处理权发送到下一个 chain.doFilter(srequest,sresponse);public void setFilterConfig(final FilterCon
15、fig filterConfig)this.filterConfig=filterConfig;计算机与软件学院计算机与软件学院计算机与软件学院计算机与软件学院7.3 字符编码过滤器在web.xml中进行过滤器注册和参数配置,具体配置信息如下:encodingcom.filter.EncodingFilter encoding gb2312encoding/*计算机与软件学院计算机与软件学院计算机与软件学院计算机与软件学院第7章 使用过滤器实现用户授权验证思考题简述过滤器的基本编写过程。如果不使用过滤器实现用户授权验证功能,我们可以用什么技术来达到同样的“用户授权验证”功能?请使用过滤器实现用户访问权限控制。例如:后台管理用户使用的JSP文件放在Admin文件夹中,只有后台登录的用户才可以访问,前台登录用户不能访问!请编写过滤器来实现?