权限检查拦截器类的代码如下:
package org.crazyit.app.interceptor;
import com.opensymphony.xwork2.*;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import java.util.*;
//权限检查拦截器继承AbstractInterceptor类
public class AuthorityInterceptor
extends AbstractInterceptor
{
//拦截Action处理的拦截方法
public String intercept(ActionInvocation invocation)
throws Exception
{
//取得请求相关的ActionContext实例
ActionContext ctx = invocation.getInvocationContext();
Map session = ctx.getSession();
//取出名为user的Session属性
String user = (String)session.get("user");
//如果没有登录,或者登录所用的用户名不是scott,都返回重新登录
if (user != null && user.equals("crazyit.org") )
{
return invocation.invoke();
}
//没有登录,将服务器提示设置成一个HttpServletRequest属性
ctx.put("tip" ,
"您还没有登录,请输入crazyit.org,leegang登录系统");
//直接返回login的逻辑视图
return Action.LOGIN;
}
}
为了实现拦截器类,首先在struts2中定义该拦截器,并使用
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<constant name="struts.custom.i18n.resources" value="mess"/>
<constant name="struts.i18n.encoding" value="GBK"/>
<package name="lee" extends="struts-default">
<!-- 用户拦截器定义在该元素下 -->
<interceptors>
<!-- 定义了一个名为authority的拦截器 -->
<interceptor name="authority"
class="org.crazyit.app.interceptor.AuthorityInterceptor"/>
</interceptors>
<!-- 定义全局Result -->
<global-results>
<!-- 当返回login视图名时,转入login.jsp页面 -->
<result name="login">/WEB-INF/content/login.jsp</result>
</global-results>
<action name="loginPro" class="org.crazyit.app.action.LoginAction">
<result name="error">/WEB-INF/content//error.jsp</result>
<result name="success">/WEB-INF/content/welcome.jsp</result>
</action>
<!-- 定义一个名为viewBook的Action,其实现类为ActionSupport -->
<action name="viewBook">
<!-- 返回success视图名时,
转入/WEB-INF/content/viewBook.jsp页面 -->
<result>/WEB-INF/content/viewBook.jsp</result>
<interceptor-ref name="defaultStack"/>
<!-- 应用自定义拦截器 -->
<interceptor-ref name="authority"/>
</action>
<action name="*">
<result>/WEB-INF/content/{1}.jsp</result>
</action>
</package>
</struts>