Struts2应用基础_自定义拦截器

在Struts2中,拦截器是核心部分。所以了解拦截器的执行过程以及对它的应用是非常重要的。在这里通过使用自定义拦截器的一个简单例子来剖析Struts2的拦截器,让大家更好地了解。
1、新建一个Action类,代码如下:
public class VerifyAction {
private String message;
……
public String addUI(){
this.message="addUI";
return "message";
}

public String execute() throws Exception{
this.message="execute";
return "message";
}
}
2、再新建一个类,这个类要实现Interceptor接口,代码如下:
public class PermissionInterceptor implements Interceptor {
@Override
public void destroy() { }
@Override
public void init() { }
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
Object user=ActionContext.getContext().getSession().get("user");
if(user!=null)
return invocation.invoke();
ActionContext.getContext().put("message", "你没有权限执行该操作");
return "message";
}
}
3、用户的登录与退出,代码如下:
user.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
    request.getSession().setAttribute("user", "huhui");
%>
    用户已经登录

quit.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
    request.getSession().removeAttribute("user");
%>
    用户已经退出登录
4、struts.xml文件的配置,代码如下:
<package name="base" extends="struts-default">
<global-results><!-- 全局视图 -->
<result name="message">/WEB-INF/page/message.jsp</result>
</global-results>
</package>
<package name="example" namespace="/huhui" extends="base">
<interceptors>
为这类添加拦截器
<interceptor name="permission" class="cn.huhui.Interceptor.PermissionInterceptor"></interceptor>
<interceptor-stack name="permissionStack"> 建一个拦截器栈
默认拦截器
<interceptor-ref name="defaultStack"></interceptor-ref>
自定义拦截器
<interceptor-ref name="permission"></interceptor-ref>
</interceptor-stack>
</interceptors>
若直接在action里添加自定义拦截器,则会覆盖默认拦截器,故建个栈
<action name="huhui*" class="cn.huhui.action.VerifyAction" method="{1}">
<interceptor-ref name="permissionStack"></interceptor-ref>
</action>
</package>
在action里设置了name="huhui*"和method="{1}"是使用了通配符,通配符的使用这里简单说明一下:
此时若你访问的路径为:http://localhost:8080/one/test/hui/huhuiadd.action,则执行add()方法,若访问路径为:http://localhost:8080/one/test/hui/huhuidelete.action,则执行delete()方法

猜你喜欢

转载自javahuhui.iteye.com/blog/1472891