1)OGNL (Object Graph Navigation Language)
访问值栈中的action的普通属性: username = <s:property value="username"/>
访问值栈中对象的普通属性(get set方法): <s:property value="user.age"/>
| <s:property value="user['age']"/> | <s:property value="user[\"age\"]"/>
访问值栈中对象的普通属性(get set方法): <s:property value="cat.friend.name"/>
访问值栈中对象的普通方法: <s:property value="password.length()"/>
访问值栈中对象的普通方法: <s:property value="cat.miaomiao()" />
访问值栈中action的普通方法: <s:property value="m()" />
访问静态方法: <s:property value="@com.bjsxt.struts2.ognl.S@s()"/>
访问静态属性: <s:property value="@com.bjsxt.struts2.ognl.S@STR"/>
访问Math类的静态方法: <s:property value="@@max(2,3)" />
访问普通类的构造方法: <s:property value="new com.bjsxt.struts2.ognl.User(8)"/>
访问List: <s:property value="users"/>
访问List中某个元素: <s:property value="users[1]"/>
访问List中元素某个属性的集合: <s:property value="users.{age}"/>
访问List中元素某个属性的集合中的特定值: <s:property value="users.{age}[0]"/>
| <s:property value="users[0].age"/>
访问Set: <s:property value="dogs"/>
访问Set中某个元素: <s:property value="dogs[1]"/>
访问Map: <s:property value="dogMap"/>
访问Map中某个元素: <s:property value="dogMap.dog101"/>
| <s:property value="dogMap['dog101']"/> | <s:property value="dogMap[\"dog101\"]"/>
访问Map中所有的key: <s:property value="dogMap.keys"/>
访问Map中所有的value: <s:property value="dogMap.values"/>
访问容器的大小:<s:property value="dogMap.size()"/> | <s:property value="users.size"/>
投影(过滤):<s:property value="users.{?#this.age==1}[0]"/>
投影:<s:property value="users.{^#this.age>1}.{age}"/>
投影:<s:property value="users.{$#this.age>1}.{age}"/>
投影:<s:property value="users.{$#this.age>1}.{age} == null"/>
users.{?#this.age==1}[0] 表示取出users里age=1的那些user,再取出下标为0的那个
users.{^#this.age>1}.{age} 表示取出users里age>1那些user的第一个,^表示第一个
users.{$#this.age>1}.{age} 表示取出users里age>1那些user的最后一个,$表示最后一个
注意this不能省略
[]: <s:property value="[0].username"/>
<s:debug></s:debug>
//OgnlAction.java
public class OgnlAction extends ActionSupport {
private Cat cat;
private Map<String, Dog> dogMap = new HashMap<String, Dog>();
private Set<Dog> dogs = new HashSet<Dog>();
private String password;
private User user;
private String username;
private List<User> users = new ArrayList<User>();
public OgnlAction() {
users.add(new User(1));
users.add(new User(2));
users.add(new User(3));
dogs.add(new Dog("dog1"));
dogs.add(new Dog("dog2"));
dogs.add(new Dog("dog3"));
dogMap.put("dog100", new Dog("dog100"));
dogMap.put("dog101", new Dog("dog101"));
dogMap.put("dog102", new Dog("dog102"));
}
......(setters and getters)
}
//cat.java
public class Cat {
private Dog friend;
public Dog getFriend() {
return friend;
}
public void setFriend(Dog friend) {
this.friend = friend;
}
public String miaomiao() {
return "miaomiao";
}
}
//Dog.java
public class Dog {
private String name;
public Dog() {
}
public Dog(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return "dog: " + name;
}
}
分享到:
相关推荐
首先,s2-005漏洞(CVE-2012-0881)是2012年发现的一个严重问题,它涉及到Struts2的OGNL(Object-Graph Navigation Language)表达式在反序列化过程中的不当处理。OGNL是一种强大的表达式语言,允许动态访问和操作...
著名的Struts2漏洞,如S2-005和S2-016,就是由于OGNL表达式的不当处理导致的远程代码执行风险。因此,在使用OGNL时,开发者需要特别注意输入验证和安全配置,避免恶意用户通过OGNL注入执行任意代码。 在深入学习...
- **依赖库**: 需要在项目的构建路径中包含Struts2的核心库和其他相关库,如struts2-core.jar、ognl.jar、freemarker.jar等。 - **struts.xml**: 这是Struts2的主配置文件,用于定义动作、结果、拦截器栈等。...
- Struts 2框架历史上曾曝出过安全漏洞,如著名的S2-005,开发者应定期更新至最新稳定版本以确保安全。 - 使用安全的拦截器配置,避免OGNL注入攻击。 6. **集成其他技术**: - 可以与Spring、Hibernate等框架...
增加安恒信息研究员nike.zheng发现的S2-045,jakatar处理复杂数据类型时,异常处理不当,导致OGNL代码执行,通过在请求的Content-Type头中构造OGNL表达式来执行Java代码。http://struts.apache.org/docs/s2-045.html...
10. **S2-005安全漏洞**:Struts2-showcase还包含了一些已知的安全漏洞实例,用于教育开发者如何避免和修复这些漏洞。 通过深入研究和分析struts2-showcase项目,开发者能够全面了解Struts2的特性和最佳实践,从而...
- `ognl.jar`:OGNL(Object-Graph Navigation Language)是Struts2中的表达式语言,用于数据绑定和传递参数。 - `freemarker.jar`:FreeMarker是一个模板引擎,常用于生成动态HTML页面。 - `xwork-core.jar`:...
1. S2-005:这是一个远程代码执行(RCE)漏洞,存在于Struts2的OGNL表达式处理中。攻击者可以构造恶意的HTTP请求,利用此漏洞在服务器上执行任意代码,从而获取服务器的控制权或数据泄露。 2. S2-009:同样也是一个...
- Struts2的安全漏洞,如S2-005、S2-016等,以及如何防止这些漏洞。 10. **最佳实践**: - 使用 strut2-convention-plugin 插件简化配置。 - 结合Spring进行依赖注入,提高组件化能力。 通过以上各个知识点的...
在安全方面,Struts2集成了许多安全插件,如S2-005、S2-016等安全漏洞的修复,以及防止XSS、CSRF等攻击的防护措施。 对于测试,Struts2支持单元测试和集成测试,开发者可以通过MockActionInvocation模拟Action执行...
- Struts2支持OGNL(Object-Graph Navigation Language)作为默认的EL,用于在视图层绑定和访问对象属性。 7. **视图技术** - 可以与各种视图技术集成,如JSP、FreeMarker、Velocity等,其中JSP是最常见的选择。 ...
11. **S2-0XX安全漏洞**:Struts2曾出现过多个安全漏洞,如S2-005、S2-016等,了解这些漏洞及其修复方式,对于开发安全的Web应用至关重要。 通过马士兵的Struts2源码教程,你将能够亲手实践上述知识点,并结合视频...
OGNL提供强大的数据访问和操作能力,可以在JSP页面上直接访问Action中的属性。 7. **Tiles插件** Tiles是Struts 2.0的一个视图组件,它允许开发者创建可重用的布局和页面片段。通过Tiles,可以轻松地组合多个JSP...
虽然Struts2强大且灵活,但也曾曝出过安全漏洞,如S2-005、S2-016等。开发者应当关注并及时修复这些漏洞,确保应用安全。 10. **Struts2与Spring集成**: Struts2可以很好地与Spring框架集成,实现依赖注入(DI)...
1. 虽然Struts2在安全方面有一些漏洞,但通过及时更新版本和合理配置,可以有效避免如S2-005、S2-016等已知漏洞。 七、最佳实践 1. 使用ActionSupport基类,可以自动处理表单回显和错误显示。 2. 避免过度依赖OGNL...
2. **S2-016**(CVE-2013-2263):此漏洞允许攻击者通过恶意的OGNL表达式执行任意代码,原因是未正确过滤用户输入。 3. **S2-048**(CVE-2017-5638):这个漏洞是由于解析JSON时的反序列化问题,使得攻击者可以通过...
OGNL(Object-Graph Navigation Language)是Struts2中的默认表达式语言,用于在Action与JSP视图之间传递数据。 视图层,Struts2支持多种视图技术,如JSP、FreeMarker、Velocity等,开发者可以根据需求选择合适的...
5. 参数绑定问题:Struts2使用OGNL进行对象属性与表单字段的绑定,如果数据类型不匹配,会导致转换错误。确保表单字段与Action类属性类型一致。 6. 安全问题:Struts2存在一些已知的安全漏洞,如S2-005和S2-045,应...
JAVA模版引擎Freemarker常用标签(一) 1. if指令 这是一个典型的分支控制指令,该指令的作用完全类似于Java语言中的if,if指令的语法格式如下: <#if condition>... <#elseif condition>... <#elseif condition>......