Legacy Platform Modernization

Modernizing a vulnerable Struts 1 monolith while keeping a business-critical platform running.

Legacy platform modernization architecture diagram

Overview & Challenge

I inherited a decade-old property management application built on Struts 1 and Java 7. The unsupported framework presented growing security risks, while tightly coupled application logic, hard-coded permissions, outdated authentication, legacy SQL and an aging UI made the platform increasingly difficult to maintain and extend.

The application supported the day-to-day operations of a property management business managing more than 1,200 properties, so modernization could not come at the expense of ongoing operations. Production support and new business requirements continued throughout the migration.

Reduce the Risk First

Rather than attempting an immediate rewrite, I removed the legacy application from the public internet and restricted access to the local network and VPN.

I rebuilt the externally accessible client portal separately, allowing clients to retain the access they needed while reducing exposure of the legacy platform.

Modernize Without Stopping the Business

As the sole developer responsible for both the existing production system and its replacement, I migrated the application incrementally from Struts to Spring while continuing to deliver features and resolve production issues.

This phased approach allowed working functionality to remain available while individual areas moved onto a framework with a practical, maintainable upgrade path.

Architecture Evolution

I introduced clearer separation between request handling in controllers, business logic in services and database access in DAOs. SQL Server remained the system’s data layer and was optimized rather than replaced without a business reason.

The core application moved from Java 7 to Java 11. The platform has continued to evolve beyond the original framework migration through maintainability improvements and a more flexible application structure.

Spring application architecture evolution diagram

Security & Authentication

Modern authentication and authorization became part of the platform’s ongoing modernization. Outdated authentication patterns and hard-coded permission decisions gave way to clearer security boundaries and controls that are easier to maintain.

Security improvements were treated as part of application architecture rather than as an isolated feature.

APIs & Selected Services

REST and GraphQL APIs were added after the original Struts-to-Spring migration, making the platform more flexible to integrate with external systems and new client experiences.

Selected functionality was later extracted into Dockerized Spring Boot services running on Java 17. The platform did not become an entirely microservice-based system; services were introduced where that separation provided a practical benefit.

Outcome

The result is a more secure and maintainable platform that is easier to troubleshoot, extend and integrate, reducing the risk carried by the legacy architecture.

The modernization established a foundation that can continue evolving without requiring the business to stop operating while technology changes underneath it.

Technologies

  • Java 7 → 11 / 17
  • Struts 1
  • Spring MVC
  • Spring Boot
  • Spring Security
  • SQL Server
  • REST
  • GraphQL
  • Docker

Explore Selected Work