项目需求之一:

批量注册之后用户的手机号为空,而我们要求手机号必须被验证。如果用户登录后其手机号为空就应该跳转到完善手机号页面。正如下图:

欲使用Filter完成此项工作。

将web.xml匹配路径设为/*(匹配所有请求路径),然后判断是否登录(获取session属性),如果已登录并且手机号为空,就应该被重定向到完善页/suplement.jsp。

即如下代码:

<span style="white-space:pre">  </span>public static final String FILT_URI = "/suplement.jsp";public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) request;HttpServletResponse res = (HttpServletResponse) response;String requestURI = req.getRequestURI().toLowerCase();// 接下来进行登录后是否手机号为空的检验User user = (User) req.getSession().getAttribute(Info.TAG_SESSION_USER);// 已登录且访问的不是/suplement.jspif (user != null && !requestURI.contains(FILT_URI)) {// 若手机号为空则拦截if (user.getPhone() == null|| "".equals(user.getPhone().trim())) {res.sendRedirect(req.getContextPath() + FILT_URI);return;//此Filter不应该再向下执行}}chain.doFilter(request, response);}

但是后来我郁闷了一天半,测试时页面是这样的:

图片可能看不太清,但是根据页面情况想必已知,报错说是:css和js文件都加载为text/html的MIME类型了。

后来在leader的提醒下我输出了一下requestURI,发现问题了:

我忘了一件很简单但却被忽略的事情!css,js等文件也要请求的,而且,无论如何应该被加载,否则此页面再也无法完整了。
于是我改代码了:

</pre><pre code_snippet_id="669010" snippet_file_name="blog_20150518_4_9356657" name="code" class="java">
</pre><pre code_snippet_id="669010" snippet_file_name="blog_20150518_7_2039867" name="code" class="java"><span style="white-space:pre"> </span>public static final String FILT_URI = "/suplement.jsp";public static final String[] WHATEVER = { ".css", ".js", ".ico", ".png",".jpg", ".bmp","registservlet" };public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) request;HttpServletResponse res = (HttpServletResponse) response;String requestURI = req.getRequestURI().toLowerCase();// 如果对于一般文件诸如css,js,png,jpg,bmp,ico等请求,应该放行if (!isPlainRequest(requestURI)) {// 接下来进行登录后是否手机号为空的检验User user = (User) req.getSession().getAttribute(Info.TAG_SESSION_USER);// 已登录且访问的不是/suplement.jspif (user != null && !requestURI.contains(FILT_URI)) {// 若手机号为空则拦截if (user.getPhone() == null|| "".equals(user.getPhone().trim())) {res.sendRedirect(req.getContextPath() + FILT_URI);return;//此Filter不应该再向下执行}}}chain.doFilter(request, response);}/*** @param requestURI* @return is Is this a plain file request type*/private boolean isPlainRequest(String requestURI) {boolean is = false;for (String s : SuplementFilter.WHATEVER) {if (requestURI.contains(s))return true;}return is;}

现在过滤的条件是:如果用户已登录但手机号为空,无法访问其他任何jsp或html页面,但是css,js,jpg等文件可以访问通过。并且,由于完善信息这个表单将提交到RegistServlet,所以它也被列到可以通过的“辛德勒的名单”中。

学习了。

JavaEE之捣蛋的Filter相关推荐

  1. 【Web】javaEE课程复习笔记

    JavaEE复习笔记 根据上课的笔记整理与补充.涵盖web应用开发基础,jsp,标签,注解,struts,spring, mvc, 数据访问等内容 (因为转于个人blog,csdn图片无法显示,可至下 ...

  2. [JavaWeb基础] 007.Struts2的配置和简单使用

    1.框架简介 采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架,用于快速开发Java Web应用.Struts实现的重点在C(Controller), ...

  3. struts2验证码

    验证码大多是jsp,servlet写的. 我拿来主义了, 再自己完善了一下(我一直努力想要站在巨人的肩膀) 首先是页面 test.jsp <%@ page contentType="t ...

  4. SuperMap iServer常见问题解答集锦(十五)

    问:在weblogic上有多个domain域,并且将iServer部署在了这些domian域上,但是只要访问一个iServer的时候就会导致其他的iServer访问不了了,是什么原因? 答:每一个iS ...

  5. JAVA设计模式之责任链模式

    责任链模式在设计模式里边属于比较难的设计模式,主要用于对一个对象进行一系列的操作,每个操作相互独立.这一系列的操作组成了一个操作链,每个操作都有其具体的职责,即是一个责任链. UML图如下 先用一个简 ...

  6. Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)

    Java之代理... 1 一.         概念... 1 二.         jdk的静态代理... 1 三.         jdk动态代理... 4 四.         cglib 动态 ...

  7. 【JavaEE进阶系列 | 从小白到工程师】JavaWeb中的过滤器(Filter)和监听器(Listener)区别,看这一篇就够

    文章目录

  8. java美容美发项目下载_基于jsp的美容美发管理-JavaEE实现美容美发管理 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的美容美发管理, 该项目可用各类java课程设计大作业中, 美容美发管理的系统架构分为前后台两部分, 最终实现在线上 ...

  9. java门户网站项目代码_基于jsp的企业门户网站-JavaEE实现企业门户网站 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的企业门户网站, 该项目可用各类java课程设计大作业中, 企业门户网站的系统架构分为前后台两部分, 最终实现在线上 ...

最新文章

  1. Gradle 使用技巧(四) - 如何定位和解决依赖冲突
  2. Java程序执行Linux命令
  3. app遍历——appCrawler的使用
  4. 前端学习(3218):批量传递props
  5. 梳理数仓FI manager节点健康检查逻辑
  6. BZOJ3597 SCOI2014方伯伯运椰子(分数规划+spfa)
  7. 深度学习Bible学习笔记:第七章 深度学习中的正则化
  8. 在 JavaScript 中将 String 与 XML 相互转换
  9. 响应式织梦模板酒店客房类网站
  10. netstat 的10个基本用法
  11. BitTorrent DHT 协议中文翻译
  12. 戴尔笔记本插入耳机后声音还是外放
  13. R语言系列:rgl包安装出错的解决办法
  14. html设置网格颜色,AI网格大小颜色怎么设置-设置AI网格大小颜色的方法 - 河东软件园...
  15. android 长按保存图片,安卓机上base64图片无法在微信中长按保存?
  16. h3c linux驱动 wn612_安装Ubuntu双系统系列——64位Ubuntu安装H3C的INode客户端
  17. css 预处理器 less sass
  18. Android应用权限大全(Manifest.permission)
  19. sun java 考试_Sun Java认证考试科目
  20. python把中文文档变为拼音

热门文章

  1. 智慧养殖管理系统解决方案
  2. 百度手机卫士,简单粗暴至极(关于Stagefright高危漏洞)
  3. 【毕业设计】时间序列的股票预测与分析系统 - python 大数据
  4. 双系统重装ubuntu,ubuntu分区方案
  5. python答题器_JavaScript教程之一个基于chrome扩展的自动答题器
  6. Kubernetes生产实践系列之七:通过etcd备份和恢复Kubernetes集群状态
  7. nginx之rewrite规则未加引号导致检查nginx语法报错
  8. css @font-face otf,@font-face
  9. 一个游戏大量合服代表什么_游戏里面合服是什么意思?对玩家有什么好处?
  10. 常用的shiro标签