`

005 - OGNL

 
阅读更多

  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;
 }


}

 

 

分享到:
评论

相关推荐

    struts2反序列化漏洞,存在s2-005、s2-016、s2-016_3、s2-017

    首先,s2-005漏洞(CVE-2012-0881)是2012年发现的一个严重问题,它涉及到Struts2的OGNL(Object-Graph Navigation Language)表达式在反序列化过程中的不当处理。OGNL是一种强大的表达式语言,允许动态访问和操作...

    struts2 OGNL表达式

    著名的Struts2漏洞,如S2-005和S2-016,就是由于OGNL表达式的不当处理导致的远程代码执行风险。因此,在使用OGNL时,开发者需要特别注意输入验证和安全配置,避免恶意用户通过OGNL注入执行任意代码。 在深入学习...

    SSI005.zip

    - **依赖库**: 需要在项目的构建路径中包含Struts2的核心库和其他相关库,如struts2-core.jar、ognl.jar、freemarker.jar等。 - **struts.xml**: 这是Struts2的主配置文件,用于定义动作、结果、拦截器栈等。...

    struts-2.3.14-lib

    - Struts 2框架历史上曾曝出过安全漏洞,如著名的S2-005,开发者应定期更新至最新稳定版本以确保安全。 - 使用安全的拦截器配置,避免OGNL注入攻击。 6. **集成其他技术**: - 可以与Spring、Hibernate等框架...

    Struts2漏洞检查工具2018版.exe

    增加安恒信息研究员nike.zheng发现的S2-045,jakatar处理复杂数据类型时,异常处理不当,导致OGNL代码执行,通过在请求的Content-Type头中构造OGNL表达式来执行Java代码。http://struts.apache.org/docs/s2-045.html...

    struts2-showcase.rar

    10. **S2-005安全漏洞**:Struts2-showcase还包含了一些已知的安全漏洞实例,用于教育开发者如何避免和修复这些漏洞。 通过深入研究和分析struts2-showcase项目,开发者能够全面了解Struts2的特性和最佳实践,从而...

    struts2.x所有包及配置文件

    - `ognl.jar`:OGNL(Object-Graph Navigation Language)是Struts2中的表达式语言,用于数据绑定和传递参数。 - `freemarker.jar`:FreeMarker是一个模板引擎,常用于生成动态HTML页面。 - `xwork-core.jar`:...

    struts2批量化利用.zip

    1. S2-005:这是一个远程代码执行(RCE)漏洞,存在于Struts2的OGNL表达式处理中。攻击者可以构造恶意的HTTP请求,利用此漏洞在服务器上执行任意代码,从而获取服务器的控制权或数据泄露。 2. S2-009:同样也是一个...

    struts2按阶段学习的具体例子

    - Struts2的安全漏洞,如S2-005、S2-016等,以及如何防止这些漏洞。 10. **最佳实践**: - 使用 strut2-convention-plugin 插件简化配置。 - 结合Spring进行依赖注入,提高组件化能力。 通过以上各个知识点的...

    Struts2实用ppt

    在安全方面,Struts2集成了许多安全插件,如S2-005、S2-016等安全漏洞的修复,以及防止XSS、CSRF等攻击的防护措施。 对于测试,Struts2支持单元测试和集成测试,开发者可以通过MockActionInvocation模拟Action执行...

    struts2的包

    - Struts2支持OGNL(Object-Graph Navigation Language)作为默认的EL,用于在视图层绑定和访问对象属性。 7. **视图技术** - 可以与各种视图技术集成,如JSP、FreeMarker、Velocity等,其中JSP是最常见的选择。 ...

    马士兵struts2源码.rar

    11. **S2-0XX安全漏洞**:Struts2曾出现过多个安全漏洞,如S2-005、S2-016等,了解这些漏洞及其修复方式,对于开发安全的Web应用至关重要。 通过马士兵的Struts2源码教程,你将能够亲手实践上述知识点,并结合视频...

    Struts 2.0全攻略之Struts 2.0参考手册

    OGNL提供强大的数据访问和操作能力,可以在JSP页面上直接访问Action中的属性。 7. **Tiles插件** Tiles是Struts 2.0的一个视图组件,它允许开发者创建可重用的布局和页面片段。通过Tiles,可以轻松地组合多个JSP...

    struts2基本类库

    虽然Struts2强大且灵活,但也曾曝出过安全漏洞,如S2-005、S2-016等。开发者应当关注并及时修复这些漏洞,确保应用安全。 10. **Struts2与Spring集成**: Struts2可以很好地与Spring框架集成,实现依赖注入(DI)...

    struts2总结项目总结

    1. 虽然Struts2在安全方面有一些漏洞,但通过及时更新版本和合理配置,可以有效避免如S2-005、S2-016等已知漏洞。 七、最佳实践 1. 使用ActionSupport基类,可以自动处理表单回显和错误显示。 2. 避免过度依赖OGNL...

    Struts2漏洞检测(带自己编写使用说明一看就上手)

    2. **S2-016**(CVE-2013-2263):此漏洞允许攻击者通过恶意的OGNL表达式执行任意代码,原因是未正确过滤用户输入。 3. **S2-048**(CVE-2017-5638):这个漏洞是由于解析JSON时的反序列化问题,使得攻击者可以通过...

    struts2权威指南

    OGNL(Object-Graph Navigation Language)是Struts2中的默认表达式语言,用于在Action与JSP视图之间传递数据。 视图层,Struts2支持多种视图技术,如JSP、FreeMarker、Velocity等,开发者可以根据需求选择合适的...

    struts2框架源码分析及问题汇总

    5. 参数绑定问题:Struts2使用OGNL进行对象属性与表单字段的绑定,如果数据类型不匹配,会导致转换错误。确保表单字段与Action类属性类型一致。 6. 安全问题:Struts2存在一些已知的安全漏洞,如S2-005和S2-045,应...

    freemarker总结

    JAVA模版引擎Freemarker常用标签(一) 1. if指令 这是一个典型的分支控制指令,该指令的作用完全类似于Java语言中的if,if指令的语法格式如下: &lt;#if condition&gt;... &lt;#elseif condition&gt;... &lt;#elseif condition&gt;......

Global site tag (gtag.js) - Google Analytics