学艺不精啊.....之前就总结过博客:
JAVA中解决Filter过滤掉css,js,图片文件等问题
结果现在又犯了老错误~
情况如下:
index.jsp 页面的验证码输入栏绑定了异步验证(jQurey实现),当输入内容发生变化时,异步去后台验证输入是否正确。
1 $(function(){ 2 3 4 5 $("#a").bind('input propertychange',function () { 6 7 var registName=this.value; 8 9 var param={"method":"checkRegistName","registName":registName}; 10 11 $.get("User.do",param,function(data){ 12 13 if(data!="1"){ 14 15 $(this).parent().children("span").html("用户名可以使用"); 16 17 }else{ 18 19 $(this).parent().children("span").html("用户名已被占用"); 20 21 } 22 23 }.bind(this)) 24 25 //ajax中的回调函数直接用this不灵,解决办法是使用bind(this)绑定this到当前事件。 26 27 }); 28 29 }
但是当项目加入了登录验证(过滤器)后,发现这个验证失效了。
经过检查发现,过滤器会拦截 页面对 js文件的请求。
过滤器中加入如下代码:
1 System.out.println( "登录验证过滤器 loginFilter" ); 2 3 String url = httpRequest.getServletPath(); 4 5 System.out.println("经过过滤器的请求url为 "+url);
访问页面,工作台输出如下:
1 登录验证过滤器 loginFilter 2 经过过滤器的请求url为 /index.jsp 3 登录验证过滤器 loginFilter 4 经过过滤器的请求url为 /js/jquery.js 5 登录验证过滤器 loginFilter 6 经过过滤器的请求url为 /yanzheng
其中 “index.jsp” 为访问的页面, “/js/jquery.js”为index.jsp 中加载的js文件,“/yanzheng”是验证码图片获取时访问的后台severlet地址。
因此,前端 jQuery实现的ajax没有正常工作。
因此在过滤器中加入对 js 文件的判断,
1 if("/index.jsp".equals(url) |"/yanzheng".equals(url)|"/js/jquery.js".equals(url)){ 2 3 chain.doFilter(request, response); 4 5 }
~问题解决了