ActionContext如何处理跨域请求

avatar
作者
筋斗云
阅读量:0

ActionContext 是 Struts2 框架中的一个核心组件,它封装了与当前请求相关的所有信息。在处理跨域请求时,可以使用 ActionContext 来设置和获取请求的头部信息、参数等。

以下是一个简单的示例,说明如何使用 ActionContext 处理跨域请求:

  1. 首先,确保你的项目中已经引入了 Struts2 相关的依赖。

  2. 在你的 Struts2 动作类中,获取 ActionContext 实例:

import com.opensymphony.xwork2.ActionContext;  public class MyAction {     public String execute() {         // 获取 ActionContext 实例         ActionContext actionContext = ActionContext.getContext();          // ...     } } 
  1. 设置跨域请求的头部信息。例如,设置 Access-Control-Allow-Origin
import javax.servlet.http.HttpServletResponse;  public class MyAction {     public String execute() {         // 获取 ActionContext 实例         ActionContext actionContext = ActionContext.getContext();          // 获取 HttpServletResponse 对象         HttpServletResponse response = (HttpServletResponse) actionContext.get("request").getResponse();          // 设置跨域请求的头部信息         response.setHeader("Access-Control-Allow-Origin", "*");         response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");         response.setHeader("Access-Control-Max-Age", "3600");         response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");          // ...     } } 
  1. 如果需要处理预检请求(OPTIONS 请求),可以在动作类中添加一个处理预检请求的方法:
public class MyAction {     public String execute() {         // ...     }      public String options() {         // 获取 ActionContext 实例         ActionContext actionContext = ActionContext.getContext();          // 获取 HttpServletResponse 对象         HttpServletResponse response = (HttpServletResponse) actionContext.get("request").getResponse();          // 设置跨域请求的头部信息         response.setHeader("Access-Control-Allow-Origin", "*");         response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");         response.setHeader("Access-Control-Max-Age", "3600");         response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");          // 返回成功响应         return "success";     } } 
  1. 配置 Struts2 动作映射,将预检请求映射到 options 方法:
<struts>     <package name="default" extends="struts-default">         <action name="myAction" class="com.example.MyAction">             <interceptor-ref name="defaultStack"></interceptor-ref>             <result name="success">/success.jsp</result>             <result name="input">/input.jsp</result>             <param name="method">options</param>         </action>     </package> </struts> 

现在,当客户端发起跨域请求时,服务器会正确处理并返回相应的响应。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!