[4/4] struts git commit: Optimises validator to reduce number of compiling pattern
Optimises validator to reduce number of compiling pattern Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/931df54a Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/931df54a Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/931df54a Branch: refs/heads/master Commit: 931df54ab379bf4eb5a625bf05066b8563c3737b Parents: eb71d88 Author: Lukasz Lenart Authored: Wed Nov 16 07:46:29 2016 +0100 Committer: Lukasz Lenart Committed: Wed Nov 16 07:46:29 2016 +0100 -- .../validator/validators/URLValidator.java | 61 1 file changed, 38 insertions(+), 23 deletions(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/931df54a/core/src/main/java/com/opensymphony/xwork2/validator/validators/URLValidator.java -- diff --git a/core/src/main/java/com/opensymphony/xwork2/validator/validators/URLValidator.java b/core/src/main/java/com/opensymphony/xwork2/validator/validators/URLValidator.java index 8786c18..f12c286 100644 --- a/core/src/main/java/com/opensymphony/xwork2/validator/validators/URLValidator.java +++ b/core/src/main/java/com/opensymphony/xwork2/validator/validators/URLValidator.java @@ -17,6 +17,8 @@ package com.opensymphony.xwork2.validator.validators; import com.opensymphony.xwork2.validator.ValidationException; import org.apache.commons.lang3.StringUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.util.regex.Pattern; @@ -42,8 +44,25 @@ import java.util.regex.Pattern; */ public class URLValidator extends FieldValidatorSupport { -private String urlRegex; +private static final Logger LOG = LogManager.getLogger(URLValidator.class); + +public static final String DEFAULT_URL_REGEX = "^(https?|ftp):\\/\\/" + +"(([a-z0-9$_\\.\\+!\\*\\'\\(\\),;\\?&=-]|%[0-9a-f]{2})+" + +"(:([a-z0-9$_\\.\\+!\\*\\'\\(\\),;\\?&=-]|%[0-9a-f]{2})+)?" + +"@)?(#?" + +")((([a-z0-9]\\.|[a-z0-9][a-z0-9-]*[a-z0-9]\\.)*" + +"[a-z][a-z0-9-]*[a-z0-9]" + +"|((\\d|[1-9]\\d|1\\d{2}|2[0-4][0-9]|25[0-5])\\.){3}" + +"(\\d|[1-9]\\d|1\\d{2}|2[0-4][0-9]|25[0-5])" + +")(:\\d+)?" + + ")(((\\/{0,1}([a-z0-9$_\\.\\+!\\*\\'\\(\\),;:@&=-]|%[0-9a-f]{2})*)*" + +"(\\?([a-z0-9$_\\.\\+!\\*\\'\\(\\),;:@&=-]|%[0-9a-f]{2})*)" + +"?)?)?" + +"(#([a-z0-9$_\\.\\+!\\*\\'\\(\\),;:@&=-]|%[0-9a-f]{2})*)?" + +"$"; + private String urlRegexExpression; +private Pattern urlPattern = Pattern.compile(DEFAULT_URL_REGEX, Pattern.CASE_INSENSITIVE); public void validate(Object object) throws ValidationException { String fieldName = getFieldName(); @@ -55,11 +74,26 @@ public class URLValidator extends FieldValidatorSupport { return; } -if (!(value.getClass().equals(String.class)) || !Pattern.compile(getUrlRegex(), Pattern.CASE_INSENSITIVE).matcher(String.valueOf(value).trim()).matches()) { +String stringValue = String.valueOf(value).trim(); + +if (!(value.getClass().equals(String.class)) || !getUrlPattern().matcher(stringValue).matches()) { addFieldError(fieldName, object); } } +protected Pattern getUrlPattern() { +if (StringUtils.isNotEmpty(urlRegexExpression)) { +String regex = (String) parse(urlRegexExpression, String.class); +if (regex == null) { +LOG.warn("Provided URL Regex expression [{}] was evaluated to null! Falling back to default!", urlRegexExpression); +urlPattern = Pattern.compile(DEFAULT_URL_REGEX, Pattern.CASE_INSENSITIVE); +} else { +urlPattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); +} +} +return urlPattern; +} + /** * This is used to support client-side validation, it's based on * http://stackoverflow.com/questions/161738/what-is-the-best-regular-expression-to-check-if-a-string-is-a-valid-url @@ -67,30 +101,11 @@ public class URLValidator extends FieldValidatorSupport { * @return regex to validate URLs */ public String getUrlRegex() { -if (StringUtils.isNotEmpty(urlRegexExpression)) { -return (String) parse(urlRegexExpression, String.class); -} else if (StringUtils.isNotEmpty(urlRegex)) { -return urlRegex; -} else { -return "^(https?|ftp):\\/\\/" + -"(([a-z0-9$_\\.\\+!\\*\\'\\(\\),;\\?&=-]|%[0-9a-f]{2})+" + - "(:([a-z0-9$_\\.\\+!\\*\\'\\(\\),;\\?&=-]|%[0-9a-f]{2})+)?" + -"@)?(#?" + -")((([a-z0-9]\\.|[a-z
[1/4] struts git commit: WW-4715 Uses isDefined function instead of null-checking
Repository: struts Updated Branches: refs/heads/master ef2939ffd -> 931df54ab WW-4715 Uses isDefined function instead of null-checking Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/a245226b Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/a245226b Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/a245226b Branch: refs/heads/master Commit: a245226b7f1fa2a2cd94508b132f0220989c1e5b Parents: ef2939f Author: Lukasz Lenart Authored: Wed Nov 16 07:21:38 2016 +0100 Committer: Lukasz Lenart Committed: Wed Nov 16 07:21:38 2016 +0100 -- .../struts2/interceptor/ProfilingActivationInterceptor.java | 7 --- .../java/org/apache/struts2/interceptor/ScopeInterceptor.java | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/a245226b/core/src/main/java/org/apache/struts2/interceptor/ProfilingActivationInterceptor.java -- diff --git a/core/src/main/java/org/apache/struts2/interceptor/ProfilingActivationInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/ProfilingActivationInterceptor.java index d5be374..70927a4 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/ProfilingActivationInterceptor.java +++ b/core/src/main/java/org/apache/struts2/interceptor/ProfilingActivationInterceptor.java @@ -27,6 +27,7 @@ import com.opensymphony.xwork2.interceptor.AbstractInterceptor; import com.opensymphony.xwork2.util.profiling.UtilTimerStack; import org.apache.commons.lang3.BooleanUtils; import org.apache.struts2.StrutsConstants; +import org.apache.struts2.dispatcher.Parameter; /** * @@ -93,9 +94,9 @@ public class ProfilingActivationInterceptor extends AbstractInterceptor { @Override public String intercept(ActionInvocation invocation) throws Exception { if (devMode) { -Object val = invocation.getInvocationContext().getParameters().get(profilingKey); -if (val != null) { -String sval = (val instanceof String ? (String)val : ((String[])val)[0]); +Parameter val = invocation.getInvocationContext().getParameters().get(profilingKey); +if (val.isDefined()) { +String sval = val.getValue(); boolean enable = BooleanUtils.toBoolean(sval); UtilTimerStack.setActive(enable); invocation.getInvocationContext().getParameters().remove(profilingKey); http://git-wip-us.apache.org/repos/asf/struts/blob/a245226b/core/src/main/java/org/apache/struts2/interceptor/ScopeInterceptor.java -- diff --git a/core/src/main/java/org/apache/struts2/interceptor/ScopeInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/ScopeInterceptor.java index fff296b..3bdad8e 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/ScopeInterceptor.java +++ b/core/src/main/java/org/apache/struts2/interceptor/ScopeInterceptor.java @@ -299,7 +299,7 @@ public class ScopeInterceptor extends AbstractInterceptor implements PreResultLi } } -if (ActionContext.getContext().getParameters().get(sessionReset) != null) { +if (ActionContext.getContext().getParameters().get(sessionReset).isDefined()) { return; }
[2/4] struts git commit: Trims input value
Trims input value Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/554b9ddd Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/554b9ddd Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/554b9ddd Branch: refs/heads/master Commit: 554b9dddb0fbd1e581ef577dd62a7c22955ad0f6 Parents: a245226 Author: Lukasz Lenart Authored: Wed Nov 16 07:30:46 2016 +0100 Committer: Lukasz Lenart Committed: Wed Nov 16 07:30:46 2016 +0100 -- .../com/opensymphony/xwork2/validator/validators/URLValidator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/554b9ddd/core/src/main/java/com/opensymphony/xwork2/validator/validators/URLValidator.java -- diff --git a/core/src/main/java/com/opensymphony/xwork2/validator/validators/URLValidator.java b/core/src/main/java/com/opensymphony/xwork2/validator/validators/URLValidator.java index 735d861..8786c18 100644 --- a/core/src/main/java/com/opensymphony/xwork2/validator/validators/URLValidator.java +++ b/core/src/main/java/com/opensymphony/xwork2/validator/validators/URLValidator.java @@ -55,7 +55,7 @@ public class URLValidator extends FieldValidatorSupport { return; } -if (!(value.getClass().equals(String.class)) || !Pattern.compile(getUrlRegex(), Pattern.CASE_INSENSITIVE).matcher(String.valueOf(value)).matches()) { +if (!(value.getClass().equals(String.class)) || !Pattern.compile(getUrlRegex(), Pattern.CASE_INSENSITIVE).matcher(String.valueOf(value).trim()).matches()) { addFieldError(fieldName, object); } }
[3/4] struts git commit: Adds double check using Commons Validator
Adds double check using Commons Validator Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/eb71d886 Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/eb71d886 Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/eb71d886 Branch: refs/heads/master Commit: eb71d8869648fdd6418d10f4fc07ef83f9180792 Parents: 554b9dd Author: Lukasz Lenart Authored: Wed Nov 16 07:31:05 2016 +0100 Committer: Lukasz Lenart Committed: Wed Nov 16 07:31:05 2016 +0100 -- core/pom.xml | 6 ++ .../xwork2/validator/URLValidatorTest.java| 18 ++ pom.xml | 5 + 3 files changed, 25 insertions(+), 4 deletions(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/eb71d886/core/pom.xml -- diff --git a/core/pom.xml b/core/pom.xml index 5790faa..9c59d91 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -432,5 +432,11 @@ test + +commons-validator +commons-validator +test + + http://git-wip-us.apache.org/repos/asf/struts/blob/eb71d886/core/src/test/java/com/opensymphony/xwork2/validator/URLValidatorTest.java -- diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/URLValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/URLValidatorTest.java index 56a9bcc..438173a 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/URLValidatorTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/URLValidatorTest.java @@ -19,6 +19,7 @@ import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.XWorkTestCase; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.validator.validators.URLValidator; +import org.apache.commons.validator.routines.UrlValidator; import java.util.HashMap; import java.util.Map; @@ -133,7 +134,7 @@ public class URLValidatorTest extends XWorkTestCase { public void testValidUrlWithDefaultRegex() throws Exception { URLValidator validator = new URLValidator(); -Pattern pattern = Pattern.compile(validator.getUrlRegex()); +Pattern pattern = Pattern.compile(validator.getUrlRegex(), Pattern.CASE_INSENSITIVE); assertFalse(pattern.matcher("myapp://test.com").matches()); assertFalse(pattern.matcher("myap://test.com").matches()); @@ -146,9 +147,18 @@ public class URLValidatorTest extends XWorkTestCase { assertTrue(pattern.matcher("https://www.opensymphony.com";).matches()); assertTrue(pattern.matcher("https://www.opensymphony.com:443/login";).matches()); assertTrue(pattern.matcher("http://localhost:8080/myapp";).matches()); -} - public void testValidUrlCaseInsesitive() throws Exception { + assertTrue(pattern.matcher("http://www.legalspace.com/__media__/js/netsoltrademark.php?d=www.a-vos-travaux.fr%2Facheter-un-aspirateur-sans-sac-pas-cher%2F";).matches()); + assertTrue(UrlValidator.getInstance().isValid("http://www.legalspace.com/__media__/js/netsoltrademark.php?d=www.a-vos-travaux.fr%2Facheter-un-aspirateur-sans-sac-pas-cher%2F";)); + + assertTrue(pattern.matcher("http://www.duadmin.isaev.Infoduadmin.Isaev.info/?a%5B%5D=%3Ca%20href%3Dhttp%3A%2F%2Fwww.aspert.fr%2Fun-seche-cheveux-lisseur-est-il-vraiment-utile%2F%3Eseche%20cheveux%20dyson%20test%3C%2Fa";).matches()); + assertTrue(UrlValidator.getInstance().isValid("http://www.duadmin.isaev.Infoduadmin.Isaev.info/?a%5B%5D=%3Ca%20href%3Dhttp%3A%2F%2Fwww.aspert.fr%2Fun-seche-cheveux-lisseur-est-il-vraiment-utile%2F%3Eseche%20cheveux%20dyson%20test%3C%2Fa";)); + + assertTrue(pattern.matcher("http://netsol-underconstruction-page-monitor-1.com/__media__/js/netsoltrademark.php?d=www.le-soutien-scolaire.fr%2Favis-et-test-comparatifs-des-robots-multifonctions%2F";).matches()); + assertTrue(UrlValidator.getInstance().isValid("http://netsol-underconstruction-page-monitor-1.com/__media__/js/netsoltrademark.php?d=www.le-soutien-scolaire.fr%2Favis-et-test-comparatifs-des-robots-multifonctions%2F";)); + } + + public void testValidUrlCaseInsensitive() throws Exception { // given final Map fieldErrors = new HashMap<>(); @@ -222,7 +232,7 @@ public class URLValidatorTest extends XWorkTestCase { } public String getTestingUrl5() { - return "http://yahoo.com/articles?id=123";; + return "http://yahoo.com/articles?id=123\n";; } }