天天看點

struts2的攔截器配置詳解

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>

繼續閱讀