struts 2 Interceptorインタフェースによるカスタムブロッキング

2937 ワード

index.jsp
<a href="${pageContext.request.contextPath }/aop/user_save"> </a>

struts.xml(すべてのメソッドをブロック)
<package name="" namespace="/aop" extends="struts-default">
    <!-- -->
    <interceptors>
        <!-- -->
        <interceptor name="myInterceptor" class="cn.yang.aop.MyInterceptor"></interceptor>
        <!-- -->
        <interceptor-stack name="myStack">
            <interceptor-ref name="myInterceptor"></interceptor-ref>
            <interceptor-ref name="defaultStack"></interceptor-ref>
        </interceptor-stack>
    </interceptors>
    <!-- -->
    <default-interceptor-ref name="myStack"></default-interceptor-ref>
    
    <action name="user_*" class="cn.yang.action.UserAction" method="{1}">
        <result name="success">/jsps/success.jsp</result>
    </action>
</package>

struts.xml(指定メソッドをブロック)
<package name="" namespace="/aop" extends="struts-default">
	<interceptors>
		<interceptor name="myInterceptor" class="cn.yang.aop.MyInterceptor"></interceptor>
	</interceptors>
	<action name="user_*" class="cn.yang.action.UserAction" method="{1}">
		<result name="success">/jsps/success.jsp</result>
		<interceptor-ref name="defaultStack"></interceptor-ref>
		<interceptor-ref name="myInterceptor"></interceptor-ref>
	</action>
	<action name="test" class="cn.yang.action.TestAction" method="test">
		<result name="success">/jsps/success.jsp</result>
	</action>
</package>

UserAction.java
public String save(){
	System.out.println("UserAction-->save()");
	return SUCCESS;
}

MyInterceptor.java
また、次のような一般的な方法があります.
    1:invocation.getProxy().getAction();//アクションクラスのオブジェクトを取得
    2:invocation.getProxy().getAtionName();//取得struts.xmlプロファイルのactionラベルのname属性値
    3:invocation.getProxy().getMethod();//アクションクラスの実行方法に対応
    4:invocation.getProxy().getNamespace();//struts.xmlプロファイルのpackageラベルのnamespaceプロパティの値
*/‍‍
<!-- Interceptor -->
public class MyInterceptor implements Interceptor {

	@Override
	public void destroy() {
		System.out.println("destroy()...");
	}

	@Override
	public void init() {
		System.out.println("init()...");
	}

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		System.out.println("intercept()...");
		<!-- doFilter-->
		invocation.invoke();
		return null;
	}

}