X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=dist%2Ffacebook-utils-2.5.0%2Fxref%2Fde%2Fjuplo%2Ffacebook%2Faspects%2FSanitizeAspect.html;fp=dist%2Ffacebook-utils-2.5.0%2Fxref%2Fde%2Fjuplo%2Ffacebook%2Faspects%2FSanitizeAspect.html;h=dcb6204c69ba52ac55282dfc691b2fe6180e2227;hb=a53595184bd6e57bdc45292cc92c393c4e2dfe6e;hp=0000000000000000000000000000000000000000;hpb=c48c9ee0e9faa89a4c0a5323b367b9f5a6abe602;p=website diff --git a/dist/facebook-utils-2.5.0/xref/de/juplo/facebook/aspects/SanitizeAspect.html b/dist/facebook-utils-2.5.0/xref/de/juplo/facebook/aspects/SanitizeAspect.html new file mode 100644 index 00000000..dcb6204c --- /dev/null +++ b/dist/facebook-utils-2.5.0/xref/de/juplo/facebook/aspects/SanitizeAspect.html @@ -0,0 +1,106 @@ + + +
++1 package de.juplo.facebook.aspects; +2 +3 +4 import org.aspectj.lang.ProceedingJoinPoint; +5 import org.aspectj.lang.annotation.Around; +6 import org.aspectj.lang.annotation.Aspect; +7 import org.slf4j.Logger; +8 import org.slf4j.LoggerFactory; +9 +10 +11 +12 /** +13 * @author Kai Moritz +14 */ +15 @Aspect +16 public class SanitizeAspect +17 { +18 private static final Logger log = +19 LoggerFactory.getLogger(SanitizeAspect.class); +20 +21 +22 /** +23 * This method sanitizes the given string in all means: +24 * <ul> +25 * <li>It removes leading and trailing whitspace.</li> +26 * <li>It removes characters, that are not allowed in the XML-output</li> +27 * <li>It checks the allowed length of the string</li> +28 * </ul> +29 * +30 * This method ensures that the output String has only +31 * valid XML unicode characters as specified by the +32 * XML 1.0 standard. For reference, please see +33 * <a href="http://www.w3.org/TR/2000/REC-xml-20001006#NT-Char">the +34 * standard</a>. This method will return an empty +35 * String if the input is null or empty. +36 * +37 * @param jp The join-point captured by AspectJ. +38 * @param in The String whose non-valid characters we want to remove. +39 * @param sanitize The annotation, the field was marked with. +40 * @see <a href="http://blog.mark-mclaren.info/2007/02/invalid-xml-characters-when-valid-utf8_5873.html">Invalid XML Characters: when valid UTF8 does not mean valid XML</a> +41 * @see <a href="http://up-download.de/up/docs/werkstatt/de/intrexx-werkstatt-ungueltige-zeichen-in-eingabefeldern-abfangen.pdf">Ungültige Zeichen in Eingabefeldern abfangen</a> +42 */ +43 @Around("set(String *) && args(in) && @annotation(sanitize)") +44 public void sanitize( +45 ProceedingJoinPoint jp, +46 String in, +47 Sanitize sanitize +48 ) +49 throws Throwable +50 { +51 if (in == null) +52 { +53 jp.proceed(new Object[] { null }); +54 return; +55 } +56 +57 in = in.trim(); +58 if ("".equals(in)) +59 { +60 jp.proceed(new Object[] { null }); +61 return; +62 } +63 +64 StringBuilder out = new StringBuilder(); // Used to hold the output. +65 char current; // Used to reference the current character. +66 +67 for (int i = 0; i < in.length(); i++) +68 { +69 current = in.charAt(i); // NOTE: No IndexOutOfBoundsException caught here; it should not happen. +70 if ((current == 0x9) || +71 (current == 0xA) || +72 (current == 0xD) || +73 ((current >= 0x20) && (current <= 0xD7FF)) || +74 ((current >= 0xE000) && (current <= 0xFFFD)) || +75 ((current >= 0x10000) && (current <= 0x10FFFF))) +76 out.append(current); +77 } +78 if (out.length() > sanitize.length()) +79 { +80 log.error( +81 "Maximum length for attribute {} exceeded: should={}, was={}", +82 jp.getSignature().getName(), +83 sanitize.length(), +84 out.length() +85 ); +86 if (sanitize.fail()) +87 throw new RuntimeException("String is longer than " + sanitize.length()); +88 else +89 out.setLength(sanitize.length()); +90 } +91 jp.proceed(new Object[] { out.toString() }); +92 } +93 } ++