actionInvocation.invoke()是什么意思

本文介绍了一个Struts2框架中自定义的验证拦截器实现方式,该拦截器能够检查用户会话状态,若未通过验证则返回登录页面,否则允许继续执行后续操作。
 

actionInvocation.invoke()是什么意思

标签: interceptorsessionstrutsstringauthenticationuser
  26045人阅读  评论(2)  收藏  举报
  分类:

关于Struts2的自定义的验证截器

[java]  view plain  copy
  1. package ch06.struts2.Interceptor;  
  2.   
  3. import java.util.Map;  
  4.   
  5. import com.opensymphony.xwork2.Action;  
  6. import com.opensymphony.xwork2.ActionInvocation;  
  7. import com.opensymphony.xwork2.interceptor.Interceptor;  
  8.   
  9.   
  10. public class AuthenticationInterceptor implements Interceptor  {  
  11.   
  12.   private static final long serialVersionUID = 1L;  
  13.    
  14.   public static final String USER_SESSION_KEY = "UserSessionKey";  
  15.     
  16.   public void destroy() {}  
  17.   
  18.   public void init() {}  
  19.   
  20.   
  21.      public String intercept(ActionInvocation actionInvocation) throws Exception {  
  22.    //取得Session  
  23.          Map session = actionInvocation.getInvocationContext().getSession();  
  24.    //从Session里获得登录时保存进session的User类  
  25.          String user = (String) session.get(USER_SESSION_KEY);  
  26.          //判断用户名是否为空    
  27.          boolean isAuthenticated = (null!=user);  
  28.          if (!isAuthenticated) {//如果未通过登录验证  
  29.   
  30.            //下面的那个return怎么能返回登录页面  
  31.              return Action.LOGIN;   //返回登录页面    
  32.         
  33.          }else{         
  34.     // 下面的这个actionInvocation.invoke()是什么意思  
  35.          return actionInvocation.invoke();//返回验证通过           
  36.          }  
  37.      }  
  38. }  


struts.xml配置自定义的拦截器

[html]  view plain  copy
  1. <!-- 自定义验证拦截器 -->  
  2.      <interceptors>  
  3.    <interceptor name="Authentication"  class="ch06.struts2.Interceptor.AuthenticationInterceptor" />       
  4.   </interceptors>   
  5.   
  6. <action name="Welcome">  
  7.             <interceptor-ref name ="Authentication"/>  
  8.             <result name="success">welcome.jsp</result>  
  9. </action>  

 

最佳答案
actionInvocation.invoke() 就是通知struts2接着干下面的事情
比如 调用下一个拦截器 或 执行下一个Action
就等于退出了你自己编写的这个interceptor了
package com.example.interceptor; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import javax.servlet.http.HttpServletRequest; import java.io.File; import java.util.List; public class CustomFileUploadInterceptor implements Interceptor { private static final long serialVersionUID = 1L; @Override public void init() { // 初始化逻辑 } @Override public String intercept(ActionInvocation invocation) throws Exception { HttpServletRequest request = (HttpServletRequest) invocation.getInvocationContext().get(org.apache.struts2.StrutsStatics.HTTP_REQUEST); if (ServletFileUpload.isMultipartContent(request)) { DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); List<FileItem> items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fileName = new File(item.getName()).getName(); String uploadPath = "/path/to/upload/directory"; File uploadDir = new File(uploadPath); if (!uploadDir.exists()) { uploadDir.mkdir(); } File uploadedFile = new File(uploadDir + File.separator + fileName); item.write(uploadedFile); } } } return invocation.invoke(); } @Override public void destroy() { // 销毁逻辑 } } 在这个代码中,程序执行到for (FileItem item : items) 这里,这里的循环是空的,没有获取到文件
08-01
package com.inc.sbu.util; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import javax.servlet.http.HttpServletRequest; import java.io.File; import java.util.List; public class FileUploadInterceptor implements Interceptor { private static final long serialVersionUID = 1L; @Override public void init() { // 初始化逻辑 } @Override public void destroy() { // 销毁逻辑 } @Override public String intercept(ActionInvocation invocation) throws Exception { HttpServletRequest request = (HttpServletRequest) invocation.getInvocationContext().get(org.apache.struts2.StrutsStatics.HTTP_REQUEST); System.out.println("do newInterceptor..............."); if (ServletFileUpload.isMultipartContent(request)) { System.out.println("111do newInterceptor..............."); DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); List<FileItem> items = upload.parseRequest(request); System.out.println("222do newInterceptor..............."+items.size()); for (FileItem item : items) { System.out.println("333do newInterceptor..............."); if (!item.isFormField()) { String fileName = new File(item.getName()).getName(); System.out.println("upload FileName..............."+fileName); String uploadPath = "/path/to/upload/directory"; File uploadDir = new File(uploadPath); if (!uploadDir.exists()) { uploadDir.mkdir(); } File uploadedFile = new File(uploadDir + File.separator + fileName); item.write(uploadedFile); } } } return invocation.invoke(); } } 这里的items.size()为什么输出是0,排除拦截器配置的原因后
最新发布
08-01
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值