A small library for Spring Boot and JPA. Annotate a field with @Sanitize
and the framework trims, masks, normalizes, or escapes it before your code ever sees it.
Available on Maven Central. Pull in the integration you need.
// Spring Boot implementation("io.github.rabinarayanpatra.sanitizer:sanitizer-spring:1.1.0") // JPA (optional) implementation("io.github.rabinarayanpatra.sanitizer:sanitizer-jpa:1.1.0")
<dependency> <groupId>io.github.rabinarayanpatra.sanitizer</groupId> <artifactId>sanitizer-spring</artifactId> <version>1.1.0</version> </dependency>
Annotate any field. Chain multiple sanitizers; they run in order.
// DTO — sanitized on Jackson deserialization
public class UserDto {
@Sanitize(using = { TrimSanitizer.class, LowerCaseSanitizer.class })
private String email;
@Sanitize(using = CreditCardMaskSanitizer.class)
private String cardNumber;
}
// JPA entity — sanitized on @PrePersist / @PreUpdate
@Entity
@EntityListeners(SanitizationEntityListener.class)
public class Payment {
@Id @GeneratedValue
private Long id;
@Sanitize(using = CreditCardMaskSanitizer.class)
private String cardNumber;
}
No registry calls. No interceptor wiring. Spring Boot autoconfiguration handles the Jackson module and sanitizer registry on startup.
params="maxLength=100,suffix=...".sanitizer-core stands alone. Add -spring or -jpa only if you need them.| TrimSanitizer | strip leading and trailing whitespace |
| CollapseWhitespace | collapse internal whitespace to single space |
| LowerCaseSanitizer | normalize to lowercase |
| UpperCaseSanitizer | normalize to uppercase |
| TitleCaseSanitizer | capitalize the first letter of each word |
| NullIfBlank | return null if the string is blank |
| RemoveNonPrintable | filter non-printable control characters |
| HtmlEscapeSanitizer | escape HTML special characters (XSS-safe) |
| SlugifySanitizer | convert to URL-friendly slug |
| SafeFilename | replace filesystem-reserved characters |
| EmailAliasStrip | remove +alias and lowercase |
| PhoneE164Sanitizer | normalize phone numbers to E.164 |
| UuidNormalize | lowercase and validate UUIDs |
| CreditCardMask | mask all but the last four digits |
| SSNMaskSanitizer | mask US SSN, reveal last four |
| IBANMaskSanitizer | mask IBAN, reveal last four |
| TruncateSanitizer | configurable truncation with optional suffix |
Implement FieldSanitizer<T> for your own logic.
@Component
public class NumericOnlySanitizer implements FieldSanitizer<String> {
@Override
public String sanitize(String input) {
return input == null ? null : input.replaceAll("[^0-9]", "");
}
}
Or extend ConfigurableFieldSanitizer if you need parameters.