Безусловно, вы должны реализовать свой собственный перехватчик и поместить его поверх других перехватчиков (необязательно сверху). Если вы поместите его поверх, он будет работать до выполнения вашей страницы и может изменить ваше возвращаемое значение.
Например:
В твоих Struts.xml
<interceptor name="security"
class="com.solekia.common.SecurityInterceptor">
</interceptor>
<interceptor-stack name="defaultStack">
<interceptor-ref name="security"/>
<interceptor-ref name="exception" />
...
</interceptor-stack>
<global-results>
<result name="login" type="redirectAction">Login</result>
<result name="adminlogin" type="redirectAction">AdminLogin</result>
<result name="error">/error.jsp</result>
</global-results>
Ваш перехватчик:
public class SecurityInterceptor extends AbstractInterceptor
{
public static final String CURRENT_USER = "current_user";
public static final String LOGIN = "login";
public static final String ADMINLOGIN = "adminlogin";
public String intercept(ActionInvocation invocation) throws Exception {
Object user = invocation.getInvocationContext().getSession().get(CURRENT_USER);
Object action = invocation.getAction();
if(action instanceof Login)
{
return invocation.invoke();
}
else if(action instanceof Register)
{
return invocation.invoke();
}
else if(action instanceof Pro)
{
return invocation.invoke();
}
if( user == null )
{
invocation.getInvocationContext().getSession().clear();
return LOGIN;
}
else
{
if(user instanceof User)
{
if(action instanceof AdminLogin)
return ADMINLOGIN;
}
if(user instanceof Admin)
{
if(action instanceof ClientPortal)
return LOGIN;
}
synchronized(user)
{
return invokeLocal(invocation) ;
}
}
}
protected String invokeLocal(ActionInvocation invocation) throws Exception
{
return invocation.invoke();
}
}
Надеюсь, это поможет