Struts拦截器
2017-06-27 14:40
183 查看
拦截器,拦截请求(Action),可以达到增强Action的功能,框架本身默认提供了很多拦截器,大概有35种,但往往实际开发中还要已定义拦截器,譬如:权限(访问)拦截器。
如果要实现拦截器,需要实现Interceptor接口或者AbstractInterceptor抽象类
struts.xml的配置:
loginAction中的代码
InterceptorDemo1.java中的配置:
再创建相应的jsp文件实现Action拦截过程的演示。
全局拦截需要在
问题1:返回值问题。因为全局拦截将包中的所有Action都拦截掉,但拦截器的返回值只能固定一个,那么此时,在所有被拦截的Action中都要配置与拦截器返回值相同的result,可以将此返回值配置为全局结果集。
问题2:包中的某些个别Action不希望拦截,譬如:登录,登出,注册等。两种解决方案:
1)将这些功能直接放入jsp页面,不使用Action 注意:不要轻易暴露实际操作性的jsp页面地址。
2)将这些功能的Action单独放入另外一个包中,或者使用方法拦截。
方法拦截:
在struts中配置:
如果要实现拦截器,需要实现Interceptor接口或者AbstractInterceptor抽象类
struts.xml的配置:
<package name="myPackage" extends="struts-default"> <interceptors> <interceptor name="Interceptor1" class = "com.interceptor.InterceptorDemo1"> </interceptor> </interceptors> <action name="log*" class="com.action.LoginAction" method="log{1}"> <result name="success">log{1}.jsp</result> </action> <action name="adduser" class="com.action.UserAction" method="add"> <result name="success" >user.jsp</result> <result name="fail">login.jsp</result> <interceptor-ref name="Interceptor1"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </action> </package>
loginAction中的代码
public String login(){ System.out.println("执行login"); return "success"; } public String logout(){ System.out.println("执行logout"); return "success"; } public String execute(){ System.out.println("执行Action"); return "success"; }
InterceptorDemo1.java中的配置:
public class InterceptorDemo1 extends AbstractInterceptor{ @Override public String intercept(ActionInvocation invocation) throws Exception { String user = (String)ActionContext.getContext().getSession().get("user"); if(user==null||"".equals(user)){ return "fail"; } return invocation.invoke(); } }
再创建相应的jsp文件实现Action拦截过程的演示。
全局拦截需要在
<interceptors> <interceptor name="Interceptor1" class="com.interceptor.InterceptorDemo1"></interceptor> <interceptor-stack name="myStack"> <interceptor-ref name="Interceptor1"/> <interceptor-ref name="defaultStack"/> <interceptor-stack> </interceptors> <default-interceptor-ref name="myStack"/>
问题1:返回值问题。因为全局拦截将包中的所有Action都拦截掉,但拦截器的返回值只能固定一个,那么此时,在所有被拦截的Action中都要配置与拦截器返回值相同的result,可以将此返回值配置为全局结果集。
<interceptors> <interceptor name="Interceptor1" class="com.interceptor.InterceptorDemo1"></interceptor> <interceptor-stack name="myStack"> <interceptor-ref name="Interceptor1"/> <interceptor-ref name="defaultStack"/> <interceptor-stack> </interceptors> <default-interceptor-ref name="myStack"/>
<global-results>
<result name="fail" type="redirect">login.jsp</result>
</global-results>
问题2:包中的某些个别Action不希望拦截,譬如:登录,登出,注册等。两种解决方案:
1)将这些功能直接放入jsp页面,不使用Action 注意:不要轻易暴露实际操作性的jsp页面地址。
2)将这些功能的Action单独放入另外一个包中,或者使用方法拦截。
方法拦截:
public class InterceptorDemo3 extends MethodFilterInterceptor{ protected String doIntercept(ActionInvocation invocation) throws Exception{ System.out.println("执行拦截"); return invocation.invoke(); }
在struts中配置:
<action name="user" class ="com.action.UserAction" method="{1}"> <result name="success">{1}user.jsp</result> <interceptor-ref name="Interceptor3"> <param name="incluseMethods">add,edit</param> </interceptor-ref> <interceptor-ref name="defaultStack"/> </action>
相关文章推荐
- Struts(8)拦截器
- Struts 2的拦截器原理和核心
- Struts 2的基石——拦截器(Interceptor)
- 通过struts拦截器和java反射机制过滤Action返回结果中的null值
- struts拦截器的使用
- struts拦截器的详解
- (转)Struts 拦截器
- struts拦截器
- Struts 2之拦截器
- Struts 2.0 与拦截器相关的配置元素
- SSH进阶(2)——用Struts拦截器实现登陆限制
- 半路杀出程咬金-你的程序是否能做到?Struts 2的拦截器-你手中的程咬金(9)
- Struts拦截器学习笔记
- Struts 2的基石——拦截器(Interceptor)
- struts 2 拦截器
- Struts2国际化、拦截器配置以及使用struts上传文件
- struts自定义拦截器的三种方式
- Struts 拦截器权限控制【通过拦截器实现登录后跳转到登录前页面】
- struts详细解释拦截器