Interceptors
The plugin defines the interceptor "ovalValidation" and the interceptor stack "ovalValidationStack" in the "oval-default" package. To use this interceptor, extend the "oval-default" package and apply the interceptor to your action, like:
<struts>
<package namespace="/myactions" name="myactions" extends="oval-default">
<action name="simpleFieldsXMLChild" class="org.apache.struts2.interceptor.SimpleFieldsXMLChild">
<interceptor-ref name="ovalValidationStack"/>
<result type="void"></result>
</action>
</package>
</struts>Annotations
OVal provides many annotations for validations that can be used out of the box (custom validators can also be defined). Once the "ovalValidation" interceptor is applied to an action, you can annotate it:
public class SimpleField extends ActionSupport{
@NotNull()
@NotEmpty
@Length(max = 3)
private String name;
...
}XML Configuration
OVal provides support for defining the validation via XML. Validation files must end in "-validation.xml" and the rules to find them, are the same rules used to find the validation XML files used by the regular validation mechanisms (default validation in xwork):
Per Action class: in a file named ActionName-validation.xml
Per Action alias: in a file named ActionName-alias-validation.xml
Inheritance hierarchy and interfaces implemented by Action class: The plugin searches up the inheritance tree of the action to find default validations for parent classes of the Action and interfaces implemented
Here is an example of an XML validation file:
<?xml version="1.0" encoding="UTF-8"?>
<oval xmlns="http://oval.sf.net/oval-configuration" xmlns:xsi="http://http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://oval.sf.net/oval-configuration http://oval.sourceforge.net/oval-configuration-1.3.xsd">
<class type="org.apache.struts2.interceptor.SimpleFieldsXML" overwrite="false"
applyFieldConstraintsToSetters="true">
<field name="firstName">
<notNull/>
</field>
</class>
</oval>Profiles
A profile is a set of validations, that can be enabled for a method in an action, for example:
import org.apache.struts2.validation.Profiles;
public class FieldsWithProfiles extends ActionSupport {
@NotNull(profiles = "1")
private String firstName;
@NotNull(profiles = "2")
private String middleName;
@NotNull(profiles = "3")
private String lastName;
@Profiles({"1", "3"})
public String firstAndLast() {
return SUCCESS;
}
@Profiles({"2"})
public void middle() {
return SUCCESS;
}
}In this example, when firstAndLast() is executed, the fields firstName and lastName will be validated. When middle() is executed, only middleName will be validated. When a method is annotated with the Profiles annotation, only the validations in the specified profiles will be performed. If no profile is specified for an action method, all the validations in the class will be evaluated.
Internationalization of messages
The OVal annotations (and corresponding XML tags) have a message attribute that can be used to specify either the error message, or the key of the error message. If a key is found in a property file, matching the value of the massage attribute, it will be used as the message, otherwise the value will be used as a literal string. For example, given this property file:
BookAction.properties
notnull.field=${field.name} cannot be nulland this class:
BookAction.java
public class BookActionextends ActionSupport {
@NotNull(message = "notnull.field")
private String title;
@NotNull(message = "You must enter a valid ISBN")
private String isbn;
...
}When that action is validated, the field errors would be:
"title cannot be null"
"You must enter a valid ISBN"
The current OVal "context" object is pushed into the stack for each validator, so it can be accessed from the property file to build the error message. See the OVal javadoc for more properties available in the FieldContext class.
The OVal Validation Interceptor
This interceptor runs the action through the standard validation framework, which in turn checks the action against any validation rules (found in files such as ActionClass-validation.xml) and adds field-level and action-level error messages (provided that the action implements com.opensymphony.xwork2.ValidationAware). This interceptor is often one of the last (or second to last) interceptors applied in a stack, as it assumes that all values have already been set on the action.
This interceptor does nothing if the name of the method being invoked is specified in the excludeMethods parameter. excludeMethods accepts a comma-delimited list of method names. For example, requests to foo!input.action and foo!back.action will be skipped by this interceptor if you set the excludeMethods parameter to "input, back".
Note that this has nothing to do with the com.opensymphony.xwork2.Validateable interface and simply adds error messages to the action. The workflow of the action request does not change due to this interceptor. Rather, this interceptor is often used in conjuction with the workflow interceptor.
NOTE: As this method extends off MethodFilterInterceptor, it is capable of deciding if it is applicable only to selective methods in the action class. See MethodFilterInterceptor for more info.
The param alwaysInvokeValidate (default to true), will make the interceptor invoke validate() on the action, if the action implements Validateable.
The param programmatic (defaults to true), will make the plugin call validateX() where X is the name of the method that will be invoked in the action. If this param is set to false, alwaysInvokeValidate is ignored and validate() won't be invoked.
Installation
The jar plugin needs to be added to the lib directory of your application as well as other dependencies. If you are using XML validation, XStream needs to be included. Here is the maven dependency example:
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.3.1</version>
</dependency>Configuration reference
Add a constant element to your struts config file to change the value of a configuration setting, like:
<constant name="struts.oval.validateJPAAnnotations" value="true" />Name Default Value Description
struts.oval.validateJPAAnnotations false Enables mapping of JPA annotations to Oval validators
分享到:
相关推荐
S2-016:https://cwiki.apache.org/confluence/display/WW/S2-016 S2-017:https://cwiki.apache.org/confluence/display/WW/S2-017 官方建议修复方案:升级到最新版本 struts-2.3.15.1 但通常现有系统升级,可能...
S2-057 CVE-2018-11776 Struts 2.3 to 2.3.34,Struts 2.5 to 2.5.16 https://cwiki.apache.org/confluence/display/WW/S2-057 影响范围非常小 S2-048 CVE-2017-9791 Struts 2.3.X ...
S2-057 CVE-2018-11776 Struts 2.3 to 2.3.34,Struts 2.5 to 2.5.16 https://cwiki.apache.org/confluence/display/WW/S2-057 影响范围非常小 S2-048 CVE-2017-9791 Struts 2.3.X ...
Apache Maven What is it? ----------- Maven is a software project ... Wiki: https://cwiki.apache.org/confluence/display/MAVEN/ Available Plugins: https://maven.apache.org/plugins/index.html
S2-057 CVE-2018-11776 Struts 2.3 to 2.3.34,Struts 2.5 to 2.5.16 https://cwiki.apache.org/confluence/display/WW/S2-057 影响范围非常小 S2-048 CVE-2017-9791 Struts 2.3.X ...
kafka 的 wiki 是徆丌错的学习文档: https://cwiki.apache.org/confluence/display/KAFKA/Index 接下来就是一系列文章,文章都是循序渐迕的方式带你了览 kafka: 关亍 kafka 的基本知识,分布式的基础:《分布式消息...
Retrieved from <https://cwiki.apache.org/confluence/display/WW/S2-045> Struts 2 -Downloads. (n.d.). Retrieved from <http://central.maven.org/maven2/org/apache/struts/struts2-core/>
一、漏洞简介 Apache Struts是美国阿帕奇(Apache)软件基金会负责维护的一个开源项目,是一套用于创建企业级Java Web应用的开源MVC框架,主要提供两个版本...https://cwiki.apache.org/confluence/display/WW/S2-046
- **Apache Geode Wiki**:提供更多详细的文档信息 (https://cwiki.apache.org/confluence/display/GEODE/Index)。 #### 六、应用场景示例 - **12306 系统**:作为中国最大的在线票务预订平台之一,12306 使用 ...
centos7下Redis哨兵集群和kafka集群和zookeeper集群搭建 http://blog.csdn.net/gaowenhui2008/article/details/71516901 https://cwiki.apache.org/confluence/display/KAFKA/Clients
除了以上提到的资源之外,[Ambari的社区Wiki](https://cwiki.apache.org/confluence/display/AMBARI/Ambari)也是一个非常宝贵的学习资源。这里有来自社区的经验分享、最佳实践案例、常见问题解答等多方面的内容。...
在windows下调试Hadoop时缺少winutils,该文件一般都是源码编译完成,也有少部分在GitHub里面...以下时Hadoop官方说明:https://cwiki.apache.org/confluence/display/HADOOP2/WindowsProblems
- **文档**: [https://cwiki.apache.org/confluence/display/Hive/GettingStarted](https://cwiki.apache.org/confluence/display/Hive/GettingStarted) - **下载**: [http://archive.apache.org/dist/hive/]...
sip-branches,New project "red5sip" is available as a branch at ... Unzip and move the sip folder to webapps.
- **Hive官方文档**: [https://cwiki.apache.org/confluence/display/Hive/](https://cwiki.apache.org/confluence/display/Hive/) - **Hadoop官方文档**: [https://hadoop.apache.org/docs/current/]...
lation and XSS attacks.(see:https://cwiki.apache.org/confluence/display/WW/S2-01 4) It help you to scan detects whether the websites of your customers has these security vulnerability.Please do not ...
- `https://cwiki.apache.org/confluence/display/Hive/GettingStarted` - `https://cwiki.apache.org/confluence/display/Hive/Home` - **下载地址**:`http://archive.apache.org/dist/hive/` #### 五、Hive...
记得留言和更新翻译进度地址: : 项目看板项目Spark 2.4.4看板负责人:记得更新和优化地址: : 贡献指南项目负责人格式:GitHub + QQ第一期(2016-10-31)贡献者名单: ://cwiki.apachecn.org/pages/viewpage.action...