拦截器 struts.xml改变默认拦截器
相似点
一:功能类似,无论拦截器与过滤器都可以在请求资源之前或者之后进行预处理或者后续操作
二:原理相同:多个拦截器可以组成拦截器栈,在请求Action之前请求经过各个拦截器执行附加操作,而请求之后按相反顺序将控制权一次交给拦截器;多个过滤器可以组成过滤器连,在请求之前依次经过过滤器,然后按相反顺序执行
三:方法类似 init destroy
不同点
一:内容,拦截器是对Action请求进行拦截,而过滤器几乎对所有请求进行过滤
二:拦截可以获取action的当前执行状态,而过滤器不可以
开发权限验证拦截器
①用户登陆成功后,保存User对象到session对象中
②拦截器中获取session对象,判断其中user对象是否为空
为空,返回到登录,不为空,继续操作
③部分代码:
- public class AuthInterceptor extends AbstractInterceptor {
- public String intercept(ActionInvocation invocation) throws Exception {
- Map session = invocation.getInvocationContext().getSession();
- User user =(User) session.get("user");
- if(user==null){
- //终止执行,返回登录页面
- return Action.LOGIN;
- }else{//继续执行剩余的拦截器和Action
- return invocation.invoke();
- }
- }
- }
④配置文件中定义拦截器并且引用
- <struts>
- <package name="struts2" extends="struts-default">
- <!-- 定义拦截器 -->
- <interceptors>
- <interceptor name="myAuthorization" class="interceptor.AuthInterceptor"></interceptor>
- <!-- 定义拦截器栈 -->
- <interceptor-stack name="myStack">
- <interceptor-ref name="defaultStack"></interceptor-ref>
- <interceptor-ref name="myAuthorization"></interceptor-ref>
- </interceptor-stack>
- </interceptors>
- <!-- 定义默认的拦截器引用
- <default-interceptor-ref name="myStack"></default-interceptor-ref>
- -->
- <default-action-ref name="defaultAction"></default-action-ref>
- <global-results>
- <result name="login" type="redirect">login.html</result>
- </global-results>
- <action name="defaultAction">
- <result>error.jsp</result>
- </action>
- <action name="*User" class="action.Login" method="{1}">
- <!-- 为Action指定拦截器引用 -->
- <interceptor-ref name="myStack"></interceptor-ref>
- <result name="{1}_success">{1}_success.jsp</result>
- <result name="fail">fail.jsp</result>
- </action>
- </package>
- </struts>
相似点
一:功能类似,无论拦截器与过滤器都可以在请求资源之前或者之后进行预处理或者后续操作
二:原理相同:多个拦截器可以组成拦截器栈,在请求Action之前请求经过各个拦截器执行附加操作,而请求之后按相反顺序将控制权一次交给拦截器;多个过滤器可以组成过滤器连,在请求之前依次经过过滤器,然后按相反顺序执行
三:方法类似 init destroy
不同点
一:内容,拦截器是对Action请求进行拦截,而过滤器几乎对所有请求进行过滤
二:拦截可以获取action的当前执行状态,而过滤器不可以
三:过滤器是servlet的概念,在web.xml中配置,拦截器是struts2/webwork中概念,在struts.xml中配置