我的环绕通知如下:@Around( "execution(* com.*.execute(..))" )
public void actionLoginValidate( ProceedingJoinPoint jp ) {
ActionMapping mapping = (ActionMapping) jp.getArgs()[ 0 ];
HttpServletRequest request = (HttpServletRequest) jp.getArgs()[ 2 ];
HttpServletResponse response = (HttpServletResponse) jp.getArgs()[ 3 ];
String fromUrl = request.getRequestURL().toString();
String par = request.getQueryString();
if ( null != par && par.length() > 0 ) {
fromUrl = fromUrl + "?" + par;
}
try {
HttpSession session = request.getSession();
if ( null == session.getAttribute( "loginInfo" ) ) {
session.setAttribute( "fromUrl", fromUrl );
response.sendRedirect( "login.do" );
} else {
jp.proceed();
}
} catch ( Throwable e ) {
log.error( e.getMessage(), e.getCause() );
}
}
Action如下:
public class TestAction extends DispachAction {
@Override
public ActionForward test1( ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response ) {
System.out.println( 11 );
return mapping.findForward( "succ" );
}
}
其中继承了我自定义的DispachAction,代码如下:
public class DispachAction extends DispatchAction {
@Override
public ActionForward execute( ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response )
throws Exception {
return super.execute( mapping, form, request, response );
}
}
struts-config.xml代码如下:
<action
parameter="p"
path="/test"
type="org.springframework.web.struts.DelegatingActionProxy" >
<forward name="succ" path="/error.jsp" />
</action>
我在地址栏打入localhost/test/test.do?p=test1后,通知可以拦截到,并顺利跳转到login.do。当登陆成功后被通知拦截,然后跳至test1方法,在test1方法中使用return mapping.findForward( "succ" )无法跳转成功,页面空白,什么都不显示,请问这是怎么回事呢?
public void actionLoginValidate( ProceedingJoinPoint jp ) {
ActionMapping mapping = (ActionMapping) jp.getArgs()[ 0 ];
HttpServletRequest request = (HttpServletRequest) jp.getArgs()[ 2 ];
HttpServletResponse response = (HttpServletResponse) jp.getArgs()[ 3 ];
String fromUrl = request.getRequestURL().toString();
String par = request.getQueryString();
if ( null != par && par.length() > 0 ) {
fromUrl = fromUrl + "?" + par;
}
try {
HttpSession session = request.getSession();
if ( null == session.getAttribute( "loginInfo" ) ) {
session.setAttribute( "fromUrl", fromUrl );
response.sendRedirect( "login.do" );
} else {
jp.proceed();
}
} catch ( Throwable e ) {
log.error( e.getMessage(), e.getCause() );
}
}
Action如下:
public class TestAction extends DispachAction {
@Override
public ActionForward test1( ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response ) {
System.out.println( 11 );
return mapping.findForward( "succ" );
}
}
其中继承了我自定义的DispachAction,代码如下:
public class DispachAction extends DispatchAction {
@Override
public ActionForward execute( ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response )
throws Exception {
return super.execute( mapping, form, request, response );
}
}
struts-config.xml代码如下:
<action
parameter="p"
path="/test"
type="org.springframework.web.struts.DelegatingActionProxy" >
<forward name="succ" path="/error.jsp" />
</action>
我在地址栏打入localhost/test/test.do?p=test1后,通知可以拦截到,并顺利跳转到login.do。当登陆成功后被通知拦截,然后跳至test1方法,在test1方法中使用return mapping.findForward( "succ" )无法跳转成功,页面空白,什么都不显示,请问这是怎么回事呢?
我刚才又试了一下,用request.getRequestDispatch()和response.sendRedirect()是可以正常跳转的
郁闷!
执行return mapping.findForward( "succ" )跳回到页面呢?
以前打算用前置通知来做。按我现在的思路来做的话,在前置通知中检查如果没有登陆的话,应该直接跳至登陆
页面,不再执行目标方法。但事实是登陆页面也跳回了,目标方法也执行了。后来才改用的环绕通知。怎么才能
阻止前置通知去执行目标方法呢?
见我前面的贴子:
http://topic.csdn.net/u/20081117/15/cbe635f7-12e8-4f86-8b0d-eb1f0216a481.html