0

I have 2 packages - one for interceptor and other for actions. I am extending the interceptor package in my actions package. After running the app, the intercept method of the interceptor is not getting called but directly Logon Action is getting called. I except that before my action the interceptor should be called.

Any idea why it is not happening?

Struts.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">

    <!-- login interceptor -->
    <include file="login-interceptor.xml"/>
    
    <!-- Struts Actions -->
    <include file="struts2-actions.xml"/>

login-interceptor.xml

<?xml version="1.0" encoding="UTF-8" ?>

<package name="login" namespace="/" extends="struts-default,json-default"\>

        <interceptors>

        <interceptor name="loginInterceptor" class="com.example.interceptor.LoginInterceptor" />

        <interceptor-stack name="loginStack">
            <interceptor-ref name="defaultStack" />
            <interceptor-ref name="loginInterceptor" />
        </interceptor-stack>
        
    </interceptors>
    
    <default-interceptor-ref name="loginStack" />

    <global-results>
        <result name="error">/WEB-INF/error.jsp</result>
    </global-results>

    <global-exception-mappings>
        <exception-mapping exception="java.lang.Exception" result="error" />
    </global-exception-mappings>

</package>

struts2-actions.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.5.dtd">


    <package name="default" namespace="/" extends="login,json-default"> 
        <action name="logon" class="com.example.actions.LogonAction">
        <result name="success">
            <param name="location">logon.jsp</param>
        </result>
    </action>
    </package>

LoginInterceptor

package com.example.interceptor;

import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.Interceptor;

public class LoginInterceptor implements Interceptor {

/**
 * @see com.opensymphony.xwork2.interceptor.Interceptor#destroy()
 */
@Override
public void destroy() {}

/**
 * @see com.opensymphony.xwork2.interceptor.Interceptor#init()
 */
@Override
public void init() {}

/**
 * @see com.opensymphony.xwork2.interceptor.Interceptor#intercept(com.opensymphony.xwork2.ActionInvocation)
 */
@Override
public String intercept(ActionInvocation objAI) throws Exception {

    String result = objAI.invoke();
    return result;
}

}

Update

It works when I change the order of the packages in the extends attribute like below:

 <package name="default" namespace="/" extends="json-default,login"> 

or add interceptor package only:

 <package name="default" namespace="/" extends="login"> 

Any idea why it doesn't work when I extend multiple packages and keep my custom package first.

Sourabh
  • 1
  • 1

0 Answers0