最近在项目中要做http api,要求提供的url是 http://***.domain.com/api/rest?sign={签名}&method={namespace}.{action名}.{调用方法名}&......
类似淘宝的top api url 风格,一个url,根据参数不同,映射到不同的控制器。
实现方法详细:
1、实现自己的ActionMapper,通过method参数将请求转发到具体的action
public class RestActionMapper extends DefaultActionMapper {
private static final Pattern p = Pattern
.compile("([^\\.]+?)\\.([^\\.]+?)\\.([^\\.]+?)$");
@Override
public ActionMapping getMapping(HttpServletRequest request,
ConfigurationManager configManager) {
ActionMapping mapping = new ActionMapping();
final String method = request.getParameter("method");
if (method == null) {
throw new IllegalArgumentException("param method can not be null");
}
Matcher m = p.matcher(method);
if (!m.matches()) {
throw new RuntimeException("method" + method + " unmatch pattern:"
+ p);
}
mapping.setNamespace("/" + m.group(1));
mapping.setName(m.group(2));
mapping.setMethod(m.group(3));
return mapping;
}
}
2、在struts.xml增加配置,将默认的actionmapper换成自定义的
<bean type="org.apache.struts2.dispatcher.mapper.ActionMapper"
name="api_rest" class="com.my.profile.struts.RestActionMapper" />
<constant name="struts.mapper.class" value="api_rest" />
3、在web.xml中,这样将接收/api/rest 的所有请求
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/api/rest</url-pattern>
</filter-mapping>
struts2很强大
分享到:
相关推荐
<bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="myDefaultActionMapper" class="com.struts2.MyDefaultActionMapper" /> <constant name="struts.mapper.class" value=...
1. **Ognl(Object-Graph Navigation Language)表达式注入**:这是Struts2中最常见的一类漏洞,源于其使用OGNL语言解析用户输入来执行服务器端操作。攻击者可以通过构造恶意的OGNL表达式,从而执行任意服务器端代码...
Struts2 中它的默认实现类是 DefaultActionMapper,ActionMapper 很大的用处可以根据自己的需要来设计 url 格式,它自己也有 Restful 的实现。ActionProxy 是 Action 的一个代理,由 ActionProxyFactory 创建,它...
首先,我们要了解Struts2中最著名的漏洞之一——CVE-2017-5638,这是一个严重的远程代码执行漏洞。攻击者可以通过精心构造的HTTP请求头,使Struts2的S2-045或S2-048等插件解析恶意的OGNL表达式,从而在服务器端执行...
15. struts.mapper.class:这是一个ActionMapper实现类,Struts2用于处理请求映射。 16. struts.multipart.maxSize:这是multipart请求信息的最大尺寸(文件上传用),Struts2用于限制文件上传的尺寸。 17. struts...
然而,如同任何复杂的软件系统一样,Struts2在它的生命周期中也暴露出了一些安全漏洞,其中一些可能导致严重的安全问题,比如远程代码执行(RCE)。 标题中的“Struts2漏洞利用工具2016版”很可能是指针对2016年...
同时,Struts2提供了丰富的插件系统,如Tiles插件用于页面布局,Ajax插件支持异步交互,以及上传下载插件等,这些都会在《Struts2技术内幕》中有详细讲解。 在源码分析部分,你将了解到Struts2如何解析HTTP请求,...
Struts2 的主要特点是使用 FilterDispatcher 作为核心控制器,将请求分发到相应的 Action 中。下面是 Struts2 面试题中涉及到的知识点: 1. Struts1 和 Struts2 的区别: Struts1 和 Struts2 是两个不同的框架,...
在Struts2中,Model代表业务逻辑,View负责展示数据,Controller则协调Model和View之间的交互。Struts2使用ValueStack来存储和传递数据,使得数据可以在Action和JSP之间无缝流动。 四、配置与注解 Struts2支持XML...
6.Struts2中的零配置与CoC(Convention over Configration).doc 7.Struts2介绍之使用链接标签.doc 8.Struts2入门.doc 9.Struts2学习进阶(基础篇1-7) 10.Struts2学习进阶(实例篇1)——struts2-blank-2.0.8实例...
Struts2提供基于注解或XML的表单验证机制,可以在Action类中定义验证规则,并在用户提交表单时自动执行。 总之,“深入浅出Struts2”这份资料全面讲解了Struts2的各个关键组成部分,包括其工作原理、配置方式、拦截...
在Struts2中,所有的Action调用都是通过`ActionProxy`来完成的。 通过以上内容,我们可以看到Struts2是一个功能强大且易于使用的Java Web开发框架,它简化了Web应用程序的开发过程,使开发者能够更专注于业务逻辑的...
不同于Struts1中的ActionServlet,Struts2中的FilterDispatcher是基于Java Servlet过滤器(Filter)来实现的。 2. **Action**:在Struts2中,Action不再直接与Servlet API耦合,而是通过拦截器(Interceptors)进行...
在Struts2应用中,Action的配置通常在struts.xml文件中完成。每个Action都有一个唯一的`name`属性,对应于用户请求的URL部分,还有一个`class`属性,指定了Action的具体实现类。值得注意的是,实际处理用户请求的并...
Struts2框架作为Java Web开发领域中的一款经典MVC(Model-View-Controller)框架,其工作原理涉及到了一系列复杂的组件交互与流程控制。本文将深入解析Struts2的工作流程,帮助开发者理解其核心机制。 ### 一、...
Struts2中的几个关键类值得进一步了解: 1. `ActionMapper`:默认实现为`DefaultActionMapper`,它将HTTP请求与Action调用进行映射,降低了Action对Servlet API的依赖。通过自定义ActionMapper,你可以自定义URL...
1. **CVE-2017-9791(S2-045)**:这是一个远程代码执行漏洞,由于Struts2的StrutsPrepareAndExecuteFilter类在处理ActionMapper时存在缺陷,攻击者可以通过精心构造的HTTP请求头来触发这个漏洞,从而执行任意服务器...
在Struts2中,动态方法调用(Dynamic Method Invocation,DMI)是一种特性,允许我们通过URL直接调用Action类的方法,而无需在配置文件中显式指定。这在某些情况下提供了更大的灵活性。 在Struts2的动态方法调用中...
XWork框架在Struts2中扮演着重要角色,使得Struts2能够更灵活、更安全地处理Web应用程序的请求和响应。 "struts2-core"是Struts2框架的主要部分,包括了控制器组件、动作类、配置管理、插件架构等。它负责接收HTTP...
在Struts2中,这通常通过配置文件(如struts.xml)或注解完成。 3. **Interceptor(拦截器)**:拦截器是Struts2的一个关键特性,它允许开发者在Action执行前后插入自定义的处理逻辑。例如,日志记录、权限检查、...