Grails 7.0

Last reviewed Sep 23, 2026

Export as PDF

Prompt Details

Prompt Composition

3prompts
  1. Java 21124 lines · 3.9K tokens
  2. Apache Groovy 4.066 lines · 3K tokens
  3. Grails 7.099 lines · 4.6K tokens
Total289 lines · 11.5K tokens

CWE Coverage

  • 20
  • 22
  • 59
  • 78
  • 79
  • 88
  • 89
  • 95
  • 116
  • 117
  • 190
  • 197
  • 201
  • 208
  • 209
  • 250
  • 287
  • 294
  • 295
  • 297
  • 306
  • 307
  • 323
  • 327
  • 329
  • 338
  • 347
  • 352
  • 362
  • 367
  • 378
  • 384
  • 427
  • 434
  • 470
  • 471
  • 488
  • 489
  • 494
  • 502
  • 532
  • 552
  • 598
  • 601
  • 611
  • 613
  • 614
  • 639
  • 653
  • 704
  • 732
  • 759
  • 770
  • 772
  • 776
  • 807
  • 829
  • 862
  • 863
  • 915
  • 916
  • 918
  • 922
  • 942
  • 1004
  • 1021
  • 1275
  • 1333
  • 1336
  • 1392

Prompt Preview

Apply the Apache Groovy 4.0 and Java 21 prompts first. Apply these additional rules to Grails 7.0 controllers, binding, GORM, GSP, REST, configuration, and installed Spring Security modules; they were checked against 7.0.16.

Version, build, and plugin integrity

  • Use a patched JDK 21 for these rules; Grails 7 requires at least Java 17. Let org.apache.grails:grails-bom manage Groovy, Spring Boot, and the Grails modules instead of choosing their versions separately, and verify the resolved graph after every plugin change.
  • Use the Grails 7 org.apache.grails artifacts, including grails-spring-security; remove obsolete org.grails.plugins security dependencies during migration and avoid mixing independently chosen framework versions.
  • Grails 7.0.16's Spring Boot manages Spring Security 6.5.11, and the August 2026 Spring Security fixes for the 6.5 line ship only under enterprise support. With Spring Security 6.5.0 through 6.5.11, which predate the 6.5.12 fix, don't accept DPoP-bound tokens through DPoPProofJwtDecoderFactory, because flooding its fixed-size jti cache lets a captured proof be replayed, and don't combine WebAuthn userVerification = REQUIRED with a distributed session store such as Spring Session on Redis or JDBC, because the requirement is lost when the session is deserialized.
  • Build AesBytesEncryptor only from a random SecretKey with CipherAlgorithm.GCM, or with CBC and a random IV generator such as KeyGenerators.secureRandom(16). Its two-argument constructor and CBC without an IV generator use an all-zero IV, and its password