java - 拦截器:actionInvocation.invoke() 不返回,但也跳转到视图
问题描述
我用struts2搭建了一个登录平台。我使用一个拦截器扩展 MethodFilterInterceptor。在方法 doIntercept 中,我使用“actionInvocation.invoke()”而不是“return actionInvocation.invoke()”。但它也运行。
struts-2.5.18
public class loginInterceptor extends MethodFilterInterceptor {
@Override
protected String doIntercept(ActionInvocation actionInvocation) throws Exception {
if (ServletActionContext.getRequest().getSession().getAttribute("user") != null){
actionInvocation.invoke();
}
return null;
}
}
我认为因为该方法返回null,所以它不应该跳转到视图。但是,确实如此。
解决方案
请参阅“编写拦截器”文档。
重要的部分:
[...]
invoke
将在调用结果后返回(例如,在您的 JSP 被渲染后),使其非常适合诸如 open-session-in-view 模式之类的事情。如果你想在结果被调用之前做一些事情,你应该实现一个 PreResultListener。
即,如果您调用invoke
,拦截器和操作将正常执行。
短路正常处理不要调用,invoke
而是返回适合您目的的结果,例如登录页面的全局结果。
推荐阅读
- git - GitHub PR squash 导致错误的合并冲突
- rabbitmq - RabbitMq:具有直接绑定的消费者的动态数量
- oracle - 为什么在Oracle的FROM子句中更改表的顺序会导致尝试JOIN时出错
- python - html中的Python货币样式问题
- solace - 请求/回复休息
- javascript - 如何在 asp.net 应用程序中存储全局 Javascript 变量
- oracle-apex - 需要自定义oracle apex标准区域
- python-3.x - 在python3中将熊猫数据框保存到.mat文件
- javascript - 控制台中的 Firebase 无效 api 密钥错误
- python - 使用日期时间减去一天正在更改月份