struts2自定义拦截器
自定义拦截器
很实用
要自定义
如果用户登录后可以访问Action中的所有方法
user.jsp{
//设置用户为登录状态,session
}
如果用户没有登录不允许访问action中的方法,并且提示"没有权限执行该操作"
package cn.itcast.action;
pulic class HelloWorldAction
{
private String message;
public String addUI(){
this.message="addUI";
return "success";
}
public String execute() throws Excention{
this.message="execute"
return "success";
}
}
struts.xml文件如下
<package name="employee" namespace="/control/employee" extends="struts-default">
=====定义全局视图
<global-result>
<result name="success">/WEB-INF/page/message.jsp</result>
</global-result>
<action name="list_*" class="cn.itcast.action.HelloWorldAction" method="{1}">
<result name="success">/WEB-INF/page/message.jsp</result>
</action>
</package>
定义拦截器需要实现com.opensymphony.xwork2.interceptor.Interceptor接口
public class PermissionInterceptor Implements Interceptor{
private static final long serialVersionUID=-5178310397732210602L;
}
拦截器 类
package cn.itcast.interceptor;
import com.opensymphony.xwork2.ActionInvocation;
public class PermissionInterceptor implements Interceptor{
public void destroy(){
}
public void init(){
}
public String intercept(ActionInvocation invocation) throw Exception {
Object user=ActionContext.getContext().getSession().get("user");//取得Session
if(user != null) invocation.invoke();//如果user不为null,代表用户自己已经登录,允许执行action中的方法
ActionContext.getContext().put("message","你没有权限执行该操作");
return null;
}
}
拦截器定义好需要注册
在struts.xml文件中进行注册
<package name="employee" namespace="/control/employee" extends="struts-default">
======拦截器
<interceptors>
<interceptor name="permission" [自定义] class="cn.itcast.interceptor.PermissionInterceptor "></interceptor>
==========定义拦截器栈<interceptor-stack name="permissionStack">
<interceptor-ref name="defaultStack"/> ====系统拦截器栈
<interceptor-ref name="permission"/>自定义拦截器
</interceptor-stack>
</interceptors>
======
<global-result>
<result name="success">/WEB-INF/page/message.jsp</result>
</global-result>
<action name="list_*" class="cn.itcast.action.HelloWorldAction" method="{1}">
----注释掉 <result name="success">/WEB-INF/page/message.jsp</result>
====使用这个拦截器<interceptor-ref name="permission"/>
</action>
</package>
注意:如果某个Action使用了自定义拦截器后那么Struts2的核心拦截器将会丢掉
既保留Struts2的核心拦截器有使用自定义拦截器 可以定义拦截器栈
包里的所有Action都使用自定义的拦截器如何定义呢?
<default-interceptor-ref name="permissionStack"></default-interceptor-ref>发那个在全局视图之前噢