struts2使用拦截器
2014-05-23 21:55
381 查看
拦截器应该算是struts2的核心了,struts2的这些东西都离不开拦截器,拦截器开发中用的地方其实不多,例如过滤器的功能还不能满足实际需要,拦截器或许是不同的选择,拦截器对资源的控制粒度要比过滤器要细一点,我觉得下面两种情况笔记适合使用过滤器
1.某些action不能被随意访问
2.过滤器不能满足的某些权限控制
例如项目要求只有登录后的用户才能调用某些action,但是用于登录的action没个人都能访问。这个要求或许过滤器能实现但是很容易出现循环重定向的情况,这种情形使用拦截器应该是较好的选择
1.编写拦截器
拦截器应继承AbstractInterceptor,如果没有继承这个类,程序会报错
这个类和过滤器有点像,这里通过session判断用户是否登录,如果session不为空则程序继续执行,此时action里方法会执行,如果session为空则重定向到登录页面
2.配置自定义拦截器栈
3.完整的配置
如果是涉及到登录的action,这些拦截器就不配置上去就行了
是不是足够的简单呢,如果没用过struts2的可以看下这篇文章:
/article/2263452.html
1.某些action不能被随意访问
2.过滤器不能满足的某些权限控制
例如项目要求只有登录后的用户才能调用某些action,但是用于登录的action没个人都能访问。这个要求或许过滤器能实现但是很容易出现循环重定向的情况,这种情形使用拦截器应该是较好的选择
1.编写拦截器
拦截器应继承AbstractInterceptor,如果没有继承这个类,程序会报错
package com.ssi.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class SessionInterceptor extends AbstractInterceptor{ @Override public String intercept(ActionInvocation arg0) throws Exception { HttpServletRequest req = ServletActionContext.getRequest(); HttpSession session = req.getSession(); HttpServletResponse res = ServletActionContext.getResponse(); if (session.getAttribute("userInfo")!=null){ arg0.invoke(); } else { res.sendRedirect("../index.jsp"); } return null; } }
这个类和过滤器有点像,这里通过session判断用户是否登录,如果session不为空则程序继续执行,此时action里方法会执行,如果session为空则重定向到登录页面
2.配置自定义拦截器栈
<interceptors> <interceptor name="loginJudge" class="com.ssi.interceptor.SessionInterceptor">/interceptor> <!-- 自定义拦截器栈 --> <interceptor-stack name="myDefaultStack"> <interceptor-ref name="loginJudge"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 将自定义拦截器栈设置默认的拦截器 --> <default-interceptor-ref name="myDefaultStack" />
3.完整的配置
<!-- 项目信息管理 --> <package name="projectAction" namespace="/project" extends="struts-default"> <interceptors> <interceptor name="loginJudge" class="com.ssi.interceptor.SessionInterceptor"> </interceptor> <!-- 自定义拦截器栈 --> <interceptor-stack name="myDefaultStack"> <interceptor-ref name="loginJudge"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 将自定义拦截器栈设置默认的拦截器 --> <default-interceptor-ref name="myDefaultStack" /> <action name="projectAction" class="projectAction"> <result name="success">/manage/projects/ProjectList.jsp</result> <result name="toEdit">/manage/projects/ProjectEdit.jsp</result> <result name="getProjectForPersonal">/manage/projects/PersonalProjectList.jsp</result> </action> </package>
如果是涉及到登录的action,这些拦截器就不配置上去就行了
<package name="loginAction" namespace="/login" extends="struts-default"> <action name="loginAction" class="loginAction"> <result name="success">/manage/index.jsp</result> <result name="logout">../index.jsp</result> </action> </package>
是不是足够的简单呢,如果没用过struts2的可以看下这篇文章:
/article/2263452.html
相关文章推荐
- Struts2拦截器的使用
- 在struts2中使用拦截器(Interceptor)控制登录和权限
- Struts2使用15 -- 拦截器5 -- 实例
- Struts2拦截器的使用(详解)
- 使用Struts2的拦截器实现权限控制
- struts2拦截器的使用
- Struts2拦截器的使用
- Struts2使用13 -- 拦截器3 -- 内置拦截器
- Struts2使用12 -- 拦截器2 -- 配置
- Struts2拦截器的使用
- Struts2拦截器的使用 (详解)
- Struts2拦截器的使用收藏
- struts2:使用拦截器注解
- Struts2使用14 -- 拦截器4 -- 自定义拦截器
- Struts2的拦截器使用
- 在struts2中使用拦截器(Interceptor)控制登录和权限
- struts2:使用拦截器注解
- 在struts2中使用拦截器(Interceptor)控制登录和权限
- struts2使用拦截器时产生java.lang.IllegalStateException异常解决办法
- Struts2拦截器的使用