关于filter拦截请求及chain.doFilter(request, response)的理解
来源:互联网 发布:windows刻录光盘 编辑:程序博客网 时间:2024/06/07 23:26
在一个jsp文件中写了一段jQuery的ajax,struts2框架下的action无论如何接收不到请求
++============================++
.jsp
$(function(){
$.ajax({
type: 'post',
url: 'customer/test.action',
data: 'p=shgsfgdsfg',
dataType:'text',
success: function(mes){
alert(mes);
},
error:function(){
alert(arguments[2]);
}
});
});
++=============================++
web.xml
<filter>
<filter-name>SessionFilter</filter-name>
<filter-class>com.wanguo.filter.SessionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SessionFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
++=============================++
struts.xml
<action name="test" class="com.wanguo.customer.action.CopyOfCustomerAction" method="test"></action>
.action
略……
struts2框架没能拦截住ajax请求,是因为自定义的SessionFilter拦截器将其拦截了。
SessionFilter部分源码:
HttpSession session = httpServletRequest.getSession();
User user = (User) session.getAttribute("user");
// 当前会话用户为空而且不是请求登录,退出登录,欢迎页面和根目录则退回到应用的根目录
if (user == null
// && !requesturi.endsWith("/processLogin.do")
&& !requesturi.endsWith("/checkLogin.action")
&& !requesturi.endsWith("/checkCode.action")
&& !requesturi.endsWith(httpServletRequest.getContextPath()
+ "/")) {
httpServletResponse.sendRedirect(httpServletRequest
.getContextPath()
+ "/");
return;
}
chain.doFilter(request, response);
由代码注释可见,struts的filter当然不能拦截此ajax的请求。若session中已经有了登陆用户的相关信息或其他条件,那么 chain.doFilter(request, response);就会执行,他会去web.xml中依次寻找下一个filter,此例中便是struts2的filter。
故:chain.doFilter(request, response)目的是要filter链持续下去,第一个filter中的实现代码不能满足条件,就会通过chain.doFilter(request, response)找到下一个filter的实现,直到找到满足条件的。
- 关于filter拦截请求及chain.doFilter(request, response)的理解
- 对chain.doFilter(request,response)的理解
- 对chain.doFilter(request,response)的理解
- 对chain.doFilter(request,response)的理解
- 对chain.doFilter(request,response)的理解
- 关于chain.doFilter(request,response)
- 浅谈filter中的chain.doFilter(request, response)的作用
- chain.doFilter(request,response)的作用
- chain.doFilter(request, response)的简单介绍
- filter(字符编码过滤器)(chain.doFilter(request,response))
- chain.doFilter(request,response)含义
- chain.doFilter(request,response)含义
- chain.doFilter(request,response) 解析
- chain.doFilter(request,response)含义
- chain.doFilter(request,response)含义
- chain.doFilter(request,response)含义
- chain.doFilter(request,response)含义
- chain.doFilter(request,response)含义
- Ubuntu下编译webkit
- python输出不换行(同一行输出不同类型数据)
- sql 主要事项
- 【Spring】官网教程阅读笔记(七):验证Form表单
- FFmpeg分析基础一
- 关于filter拦截请求及chain.doFilter(request, response)的理解
- oracle基础:创建表和设置主键,修改属性等
- [省选前题目整理][BZOJ 2434][NOI 2011]阿狸的打字机(AC自动机+fail树+DFS序+树状数组)
- 对传入where条件的sql语句进行参数化处理
- (6.1.3)存储器管理
- Python 数据分析(一)[MAC]
- 字符过滤拷贝
- IOS 点语法 release 与retain self 的解析
- 黑马程序员——面向对象的封装以及set和get方法