Cloudsupport extends Spring Boot with opinionated conventions and smart abstractions that eliminate boilerplate — so you can focus on what actually matters.
Real-world examples showing the same functionality implemented with pure Spring Boot versus Cloudsupport. Less code, same power, better readability.
A proper JPA entity with audit fields, primary-key-based equals/hashCode that obeys the JPA contract, and Hibernate proxy safety.
@Entity @Getter @Setter public class Person { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @CreatedBy private String createdBy; @CreatedDate @Temporal(TemporalType.TIMESTAMP) @Column(columnDefinition = "TIMESTAMP WITH TIME ZONE") private Date createdDate; @LastModifiedBy private String lastModifiedBy; @LastModifiedDate @Temporal(TemporalType.TIMESTAMP) @Column(columnDefinition = "TIMESTAMP WITH TIME ZONE") private Date lastModifiedDate; @Column(unique = true) private Long uid; private String firstName; private String lastName; private OffsetDateTime birthDate; /** * Hash code based on the primary key. * Ref: https://stackoverflow.com/questions/5031614 */ @Override public int hashCode() { // If the ID is null, fall back to object identity if (id == null) { return super.hashCode(); } return Objects.hashCode(id); } /** * Equals based on the primary key. * Ref: https://stackoverflow.com/questions/5031614 */ @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; // Fix for comparing transient and proxied entities Class<?> c1 = Hibernate.getClass(this); Class<?> c2 = Hibernate.getClass(obj); if (!c1.equals(c2)) return false; BaseEntity other = (BaseEntity) obj; // If the IDs are null, fall back to object identity if (id == null || other.getId() == null) { return super.equals(obj); } return Objects.equals(this.getId(), other.getId()); } /** * To String based on the primary key. */ @Override public String toString() { return new ToStringBuilder(this) .append("id", this.getId()) .toString(); } } // Plus a class that implements // org.springframework.data.domain.AuditorAware
@Entity @Getter @Setter public class Person extends BaseEntity { @Column(unique = true) private Long uid; private String firstName; private String lastName; private OffsetDateTime birthDate; }
Securing a method with permission checks and extracting the logged-in user’s name from a JWT token — including the OpenAPI metadata.
@PreAuthorize("hasAuthority('permission')") @SecurityRequirement(name = "JWT") public void operation( @AuthenticationPrincipal(expression = "#this instanceof T(org.springframework .security.oauth2.jwt.Jwt) ? claims['name'] : null") @Parameter(hidden = true) String name) { }
@HasAuthority("permission") public void operation(@LoggedInName String name) { }
Mapping web services with versioning and OpenAPI grouping derived from the Java package structure. Given the URI, finding the code is immediate — enforcing a well-structured codebase that mirrors the API.
package ....any.arbitrary.subpackage; @RequestMapping("<prefix>/group/operationName.v1") public class OperationNameControllerV1 { @GetMapping @Tag(name = "group") public ReturnModel handle() { } }
package ....<group>.operationName.v1; @Ws public class OperationNameWsV1 extends BaseWs { @GetMapping public ReturnModel handle() { } }
Auto-configuring a full OIDC/JWT security stack for microservices — resource server, CORS, method security, Swagger scheme, MDC logging, and more.
// You implement all the following for backend microservices: // 1. SecurityFilterChain bean that enables // OAuth2 ResourceServer authorization via JWT // 2. Disable form login, BASIC auth and CSRF // 3. CORS Filter for mobile + credentialed requests // 4. Activate method security // (@PreAuthorize and @PostAuthorize) // 5. Enable meta-annotation templating // for method security // 6. JwtAuthenticationConverter for loading // authorities from JWT claim (e.g., "roles") // 7. Bearer Swagger security scheme // (e.g., "JWT") for OpenAPI // 8. Post-processing filter to feed MDC // with user data (enriched logging) // 9. Post-processing filter to enhance the Spring // authentication token with web data // (e.g., IP from "X-Forwarded-For" header)
// application.properties cloudsupport.security.scheme=jwt
Cloudsupport is a thin, non-invasive layer that respects Spring Boot’s conventions while removing its ceremony.
Convention-over-configuration patterns that eliminate repetitive code.
Enforces separation of concerns naturally. Your codebase stays organized as it grows without extra discipline.
Used in production systems handling real-world workloads. Stable, reliable, and continuously maintained.
More than 50 ready-to-use UI components for React Native — with customizable themes, built-in validation, and a consistent design language across your entire app.
The UI suite includes everything you need to ship polished mobile apps without reinventing the wheel.
Add Cloudsupport to your existing Spring Boot project in minutes and start removing boilerplate today.