`
webcode
  • 浏览: 5947654 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

struts2的拦截器和filter的区别

 
阅读更多

所有的跳转和请求都走filter

对jsp的页面的请求不会走拦截器,

既走拦截器又走filter的请求会先走拦截器后走filter,

具体实例:

1.拦截器:

package com.ultratest.businessTest.interceptor;


import java.io.PrintWriter;
import java.util.Map;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.ultratest.businessTest.model.User;
import com.ultratest.businessTest.system.Constants;


/**
* Session拦截器
*
* @author linhb
*
*/
public class SessionInterceptor extends AbstractInterceptor {


private static final long serialVersionUID = 1L;
private static Logger log = Logger.getLogger(SessionInterceptor.class);





@Override
public String intercept(ActionInvocation invocation) throws Exception {

ActionContext ctx = invocation.getInvocationContext();
Map session = ctx.getSession();
User user = (User) session.get(Constants.SESSION_USER_KEY);
if (user == null) {
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
PrintWriter pw = response.getWriter();
String flag = "";

//异步请求
if (request.getHeader("X-Requested-With") != null
&& request.getHeader("X-Requested-With").equalsIgnoreCase(
"XMLHttpRequest")) {
log.info("用户没登录或登录过期,不能访问");
response.setCharacterEncoding("text/html;charset=utf-8");
response.setContentType("text/html;charset=utf-8");
flag = "9999";
pw.write(flag);
return null;

//普通请求
} else {
response.setCharacterEncoding("text/html;charset=utf-8");
response.sendRedirect("/businessTest/login.jsp");
log.info("用户没登录或登录过期,不能访问");
return "login";
}
}
return invocation.invoke();
}


}

过滤器代码

package com.ultratest.businessTest.interceptor;
import java.io.IOException;


import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import com.ultratest.businessTest.model.User;


public class JspFilter implements Filter {


private boolean isExcludePages(String url) {


return url.indexOf("login.jsp") != -1;

}


public void destroy() {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
User user = (User) httpServletRequest.getSession(true).getAttribute(
"user");

if (!isExcludePages(httpServletRequest.getRequestURI())) {
if (user == null) {
httpServletResponse.sendRedirect(httpServletRequest
.getContextPath() + "/login.jsp");
}
}
filterChain.doFilter(servletRequest, servletResponse);


}


@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub


}
}

既所有的非 http://localhost:8080/businessTest/index.jsp(结尾是.jsp的)形式的请求拦截器和过滤器都会走

且先走拦截器后走filter,

注:拦截器是struts特有的概念,所有使用了struts的组件都会走拦截器,而jsp是servlet中的概念,filter是web的概念,

所有方位servlet的都会走filter

拦截器和过滤器的配置:

在web-xml中配置

<filter>
<filter-name>jspFilter</filter-name>
<filter-class>com.ultratest.businessTest.interceptor.JspFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>jspFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

在struts-xml文件中配置

<package name="businessTest-json" extends="json-default">
<interceptors>
<interceptor name="sessionInterceptor" class="com.ultratest.businessTest.interceptor.SessionInterceptor">
</interceptor>
<interceptor-stack name="permissionStack">
<interceptor-ref name="sessionInterceptor" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="permissionStack"></default-interceptor-ref>
<global-results>
<!-- 当返回login视图名时,转入/login.jsp页面 -->
<result name="login">/login.jsp</result>
</global-results>
</package>


分享到:
评论

相关推荐

    使用struts2拦截器对登陆权限验证

    综合使用servlet filter与struts2 interceptor对权限进行验证。

    Java Struts 实现拦截器

    Struts2的处理流程: • 客户端产生一个HttpServletRequest的请求,该请求被提交到一系列的标准过滤器(Filter)组建链中(如ActionContextCleanUp:它主要是清理当前线程的ActionContext、Dispatcher,...

    Struts2编写的通用(拦截器,过滤器)Filter

    Struts2编写的通用的禁止用户非法访问非登录页面以外的其他页面的拦截器,过滤器,程序附带运行说明和可执行文件,希望给您的工作或学习带来帮助

    拦截器和控制器的区别

    拦截器和过滤器的区别 1、拦截器基于动态代理 , 过滤器基于函数回调 2、拦截器不依赖于servlet容器,通过动态代理实现,过滤器依赖于servlet容器 3、拦截器在方法前后,异常前后等调用,而过滤器只能在请求前和请求...

    结合struts2编写的通用过滤器filter

    结合struts2编写的通用过滤器filter,内附有word文档操作详解,配置十分方便,曾经做ssh项目的时候用于拦截浏览器地址栏非法登录,用在非法登录拦截这一块非常适合,经过测试没有问题。

    Struts2的工作原理和流程

    2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 3 接着FilterDispatcher被调用,...

    struts2流程与流程图

    但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)。  一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result。 Struts 2的核心控制器是...

    struts2-1.zip

    MVC模式(model view controller) 模型:封装应用程序的数据和业务逻辑(POJO一个普通的JAVA类) 视图:实现应用程序的信息显示功能(JSP) 控制器:接收来自用户的输入...Struts2中最主要的一个就是过滤器filter

    struts2配置2.5版

    拦截器:web.xml 配置拦截器&lt;filter&gt; struts2.5的filter-class 与struts2.5以前版本有所不同 &lt;!-- 浏览器访问 http://localhost:8080/MyWeb/helloworld --&gt; --&gt; &lt;?xml version="1.0" encoding=...

    ajax请求拦截器

    struts2在struts2.xml里配置拦截器可以过滤到指定的url的请求,但是对于ajax的请求确是过滤不了,比如说sesion超时或某些页面有权限控制的,通过ajax的请求时系统会报错最近在解决此类问题时碰上了找了不少资料,...

    struts学习笔记(2)

    当前struts2的filter过滤到一个.action结尾的请求的时候,会把这个请求交给struts2内部的拦截器(interceptor) 2)拦截器起到什么作用 可以帮我们丰富action的功能,比自动类型转换(页面传一个String类型的id,接收的...

    名为责任链或者拦截器或者过滤器的简单模拟

    我看过一个比较好的功能是,利用strut2的拦截器和*-Validation.xml文件以及标签(strut2标签,主要是form-close.ftl这个模板文件),自动生成页面的Form前端验证。(当然辅助的客户端js文件如jquery/jquery-...

    struts2开发文档

    ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框 架的集成很有帮助,例如:SiteMesh Plugin) 3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来 决定这个请是否需要调用某个...

    利用java filter 实现业务异常拦截源码

    利用java filter 实现业务异常拦截 跳转到错误信息提示页面 我们在做项目中肯定都会遇到自定义业务异常 ,然后将业务异常信息跳转的统一的信息提示页面的情况,比如我们在struts的时候我们会用到struts的异常处理...

    仿struts2框架自己写的代码

    struts2与struts不同,它主要事用filter来完成主要业务与逻辑,并运用了很多拦截器,本人采用了类似的结构仿写了一个struts2的框架,对学习struts2的人来说,能帮助你透彻的了解struts2框架

    基于Java(Struts2 框架)+Mysql实现(Web)学生成绩管理系统【100010053】

    数据验证:HTML5 的原生验证模式、Struts2 的 Validation 验证框架以及 Interceptor 拦截器、JavaEE 的 Filter 过滤器 学生端(修改个人信息、修改密码、查看成绩) 教师端(成绩查看与修改、录入成绩、所教科目管理...

    struts过滤器.doc

    struts自定义过滤器是一项一直受青睐的技术,本文件总结了自定义几种常用过滤器的代码和描述。

    struts2笔记(配置,标签库等)

    struts.xml的配置, xeb.xml中的Filter的配置(前端控制器) 包的配置, 拦截器,拦截栈, 表单中取数据的方法

    Struts2入门笔记1-4

    之前的 MVC 中,C 就是Servlet,而现在我们使用Filter实现了 C 的功能;并且发现 Filter的功能 &gt; Servlet的功能 ;其实吧 Struts2 的控制实现是Filter

    浅析JAVA中过滤器、监听器、拦截器的区别

    1.过滤器:所谓过滤器顾名思义是用来过滤的,在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的action进行业务逻辑,比如过滤掉非法url(不是login....

Global site tag (gtag.js) - Google Analytics