logo

Are you need IT Support Engineer? Free Consultant

SAP Commerce Cloud JDK 21 Framework Update Checklist

  • By Sanjay
  • 30/07/2026
  • 3 Views



This checklist is based on KBA 3653999, the central SAP Knowledge Base Article for the JDK 21 Framework Update. It is intended for developers and architects as a structured preparation and execution guide covering all mandatory and conditional steps required before, during, and after upgrading SAP Commerce Cloud from JDK 17 to JDK 21 (Spring Framework 6.2 / Spring Security 6).

WHAT CHANGED 

Component

JDK 17 

JDK 21 

Java runtime

Java 17

Java 21 

Spring Framework

Spring 5.x

Spring Framework 6.2

Spring Security

Spring Security 5

Spring Security 6

OAuth library

Spring Security OAuth (EOL 2022)

Spring Authorization Server

OAuth extensions

oauth2

authorizationserver, resourceserver, oauth2commons

Servlet namespace

javax.servlet.*

jakarta.servlet.*

JSTL

jakarta.servlet.jsp.jstl 1.2.6

jakarta.servlet.jsp.jstl 3.0.1

 NOTE: Every customization touching security config, servlet filters, OAuth clients, or javax.* imports requires review and likely modification.

PRE-UPGRADE ACTIONS

TIP: Run OpenRewrite recipe (KBA 3618495) first on a clean branch. It automate most javax→jakarta replacements and Spring API changes. Although Groovy, JSP, and security XML files still require manual review.

Action / Check

Applies to

KBA(s)

Category

Take a full pre-upgrade snapshot (database + media/blob storage)

ALL customers 

3749905

Pre-Upgrade

Clean up OAuth cleanup cron job log files before starting the upgrade

ALL customers – check log file count before deciding to skip (run SQL query in the KBA; potential high risk)

3697105

Pre-Upgrade

Set password.encoding.auto.update.enabled=true and allow a grace period for users to log in and rehash. Also set toggle.disallowTaeEncryptionFallback.enabled=true to prevent fallback to plaintext for TAE-encrypted attributes

Commerce Version below jdk21.5 / 2211.47 – prevents admin/user lockout when deprecated password encoders are removed 

3705251

Pre-Upgrade

Run OpenRewrite recipes on all custom extensions

ALL customers with custom Java extensions 

3618495

Code Migration

Update manifest.json: rename “oauth2” → “authorizationserver”; add resourceserver extension

ALL customers – missing this causes 404 on all OAuth token endpoints after upgrade

3732704
3687578

OAuth

Audit all OAuth clients: remove Password Flow and Implicit Flow usages; ensure each client has at least one authority and grant type

ALL customers – Password Flow removal also affects OOTB clients (SmartEdit, Backoffice). 

3641255

OAuth

Enable authserver.client.validation.dry.run=true to surface OAuth config errors without breaking anything

ALL customers – disable (set to false) after migration is validated

3641255

OAuth

Verify storefront and API share the same base domain (eTLD+1) for custom login pages

Composable Storefront with custom login page on a separate domain from the API

3737709

OAuth

Enable authserver.enable.forwarded.header=true   Requires patch 2211-jdk21.11 or later

API behind CDN + using Authorization Code Flow – prevents post-login redirect to internal domain. 

3749299

OAuth

Update spring-security-config.xml: add use-authorization-manager=”true” use-expressions=”true”; replace IS_AUTHENTICATED_FULLY, SCOPE_xxx with EL expressions

Any custom extension with Spring Security XML config (Backoffice, resource server, custom web modules)

3728202

Spring Security

Add security-context-explicit-save=”false” to spring-security-config.xml

Accelerator Storefront with custom extension using SAML SSO – prevents ASM session loss after login

3759789

Spring Security

Set csrfTokenRequestAttributeHandler bean property csrfRequestAttributeName to “CSRFToken”

Accelerator Storefront with custom spring-security-config.xml – prevents 405 on all POST requests

3670785

Spring Security

Replace javax.servlet.* → jakarta.servlet.* in Groovy, JSP, and any files OpenRewrite did not cover

ALL customers with custom storefront or extensions using servlet APIs

3691236

javax→jakarta

Replace wro4j-core-1.8.x.jar with wro4j-core-2.1.1.jar in custom storefront lib directory

Custom Accelerator Storefront – old version causes WebResourceOptimizer crash on startup

3691236

javax→jakarta

Upgrade jakarta.servlet.jsp.jstl from 1.2.6 to 3.0.1 in custom storefront WEB-INF/lib

Custom Accelerator Storefront using JSP/JSTL tags

3691236

javax→jakarta

Remove ${ENV::KEYSTORE_ALIAS} from custom server.xml (variable removed in JDK 21)

Customer has a customised server.xml – causes SmartEdit blank login page if not removed

3724221

SmartEdit

Update SmartEdit OAuth client via ImpEx

ALL customers using SmartEdit 

3193656

SmartEdit

Update PunchOut authentication flow to new OAuth implementation

B2B customers using PunchOut integration (Ariba, Coupa, Jaggaer)

3745750

B2B / PunchOut

For multi-site Composable Storefront with custom login pages: update loginPageUri config

Composable Storefront with multi-site setup where each site uses a different custom domain and a custom login page

3785308

OAuth / Multi-site

Fix custom ImpEx import scripts that have pre-existing errors (set the property back only as interim workaround)

Customers with custom ImpEx – JDK 21 now fails deployment on any import error (previously fails silently)

3721228

Deployment

 REQUIRED EXTENSION CHANGES

The oauth2 extension has been removed. Update your manifest.json before deploying:

// REMOVE:
{ “name”: “oauth2”, “contextPath”: “/authorizationserver” }

// ADD:
{ “name”: “authorizationserver”, “contextPath”: “/authorizationserver” },
{ “name”: “resourceserver”,      “contextPath”: “/resourceserver” }

RELEVANT SECURITY VULNERABILITIES 

Action / Check

Applies to

KBA(s)

Category

Patch to 2211-jdk21.10 / 2211.51 / 2205.49 CVE-2026-34263 
An unauthenticated attacker can trigger server-side code execution via an improperly secured Backoffice endpoint.
If you have customised backoffice-spring-security.xml specifically: patching alone is NOT sufficient, apply the manual config fix from KBA 3746113 to your customised file.

ALL customers

3733064
3746113

Security

Patch to 2211-jdk21.10 / 2211.52 / 2205.50 CVE-2026-22732 (CVSS 9.1)
Spring Security may skip writing HTTP security response headers on certain request paths.

ALL customers

3748262

3761279

Security

POST-UPGRADE VALIDATION

Action / Check

Applies to

KBA(s)

Category

OAuth token endpoint returns token successfully (not 404 or redirect)

ALL customers

3687578
3732704

OAuth

Storefront login works in Chrome, Safari, Firefox, Edge (+ incognito)

ALL customers

3689863
3737709

OAuth

Authorization Code + PKCE flow completes end-to-end

ALL customers using storefront login

3641255

OAuth

Client Credentials flow returns a token (new token per request is intentional)

Integrations using Client Credentials

3743934

OAuth

Backoffice SSO login succeeds

SSO/SAML configured for Backoffice

3728202

OAuth

SmartEdit login succeeds

Customers using SmartEdit

3193656

SmartEdit

ASM agent login and customer emulation works

Accelerator Storefront with ASM + SAML SSO

3759789

Spring Security

POST requests on all storefront forms succeed (not 405)

Custom Accelerator Storefront

3670785

Spring Security

PunchOut setup request succeeds

B2B PunchOut integration

3745750

B2B

CDC/Gigya login endpoint returns 200

Customers using SAP Customer Data Cloud

3736401

Spring 6 & Web

B2B API calls use /orgUsers/current (not /users/current)

B2B sites

3750446

B2B

Multi-site: each custom domain resolves to the correct base site

Composable Storefront multi-site with custom domains

3785308

OAuth / Multi-site

Disable authserver.client.validation.dry.run set back to false to enforce strict OAuth client validation in production

ALL customers who enabled it pre-upgrade

3641255

OAuth

 





Source link

Leave a Reply

Your email address will not be published. Required fields are marked *

Chat with us on WhatsApp!