Maybe
Misagh could put in his thoughts on this, but I would argue the opposite is more true in fact, having custom java code and having to register, etc.. rely's on way MORE base code in cas then the groovy methods. If you take a look at the way groovy scripts are written in cas it is mainly a simple execute groovy method passing the parameters and just reading the results. That code itself doesn't change much, we had thousands of lines of custom java code before the 6.x days, for all kinds of things. Now we maintain 2 individual java class files and working to get those changes pushed into cas, just need to write the test cases and scenarios.
One of the benefits to using groovy is the no compile time, they don't need to be compiled with your overlay! most if not all groovy scripts are reloaded on demand, when changed and take affect immediately with no restarts which makes a huge difference.
Not sure why the other posters simple-mfa wouldnt work but works no problem for us, it could be the trigger type being used, there is the
cas.authn.mfa.core.provider-selector-groovy-script and what we use,
cas.authn.mfa.groovy-script and we have some vendors/external services that use database auth and mfa is fine, we also use surrogate and in our groovy we have parts written to either bypass/force for surrogate situations.
We have been using CAS since the 3.x days and when groovy webflow came along, it was a blessing!! It is soooo much easier to maintain then custom java code. See the attached, this is one of about 4 different flow modifiers, using the "properties" in a service definition, we utilize this flow to inject custom post fields for services that require a POST response instead of REDIRECT.
I think, in my opinion, groovy is way more sustainable to maintain then the other.
Thanks,
John