1) 自定義攔截器(實作Interceptor接口或者繼承AbstractInterceptor類);
public class AuthorityInterceptor extends MethodFilterInterceptor{
@Override
public String doIntercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
invocation.getAction().toString();
ActionContext actionContext = invocation.getInvocationContext();
Map session = actionContext.getSession();
User user = (User)session.get("user");
if(user==null)
{
return "login";
}else
{
System.out.println("這是攔截前======");
String result = invocation.invoke();
System.out.println(result);
System.out.println("這是攔截後======");
return result;
}
}
}
2) 在struts.xml配置檔案中注冊攔截器,并在Action中引用
<package name="system" extends="struts-default" namespace="/system">
<!-- 配置攔截器 -->
<interceptors>
<!-- 配置自定義攔截器 -->
<interceptor name="authorityinterceptor" class="com.softfz.interceptor.AuthorityInterceptor">
<!-- 配置該攔截器不攔截的action方法名,即黑名單-->
<param name="excludeMethods">login</param>
<!-- 配置該攔截器攔截的action方法名,即白名單
<param name="includeMethods">XXX,XX</param>
-->
</interceptor>
<!-- 配置自定義攔截器棧,注意自定義攔截器一定要包含【defaultStack】
攔截器的執行順序:如果有攔截器a,b,c,則執行順序為a-b-c-action-c-b-a
-->
<interceptor-stack name="mystack">
<interceptor-ref name="authorityinterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 配置預設攔截器
1.覆寫了在struts-default中的預設攔截器棧配置
2.即所有action都會先被預設攔截器所攔截
-->
<default-interceptor-ref name="mystack" ></default-interceptor-ref>
<action name="user" class="com.softfz.system.action.UserAction">
<result name="success">/welcome.jsp</result>
<result name="login">/login.jsp</result>
<result name="addBefore">/user_add.jsp</result>
<!-- 可以單獨為某個action配置攔截器
<interceptor-ref name=""></interceptor-ref>
-->
</action>
</package>