I struggled with the same. With help from this community, going thru some 
cas code, and reading thru springboot docs I was finally able to get thru 
it. I'll try to summarize.

There is a default login webflow already defined for you. What I did was 
let the default flow execute but then intercepted the last transition from 
REAL_SUBMIT -> TickgetGrantingTicket. So now the flow looks like 
DEFAULT_WEBFLOW->REAL_SUBMIT->MY_CUSTOM_WEBFLOW->TICKET_GRANTING_TICKET. My 
custom webflow consist of a dozen or so actions.

1) First you need to define a Configurer class, see cas doc 
SomethingWebflowConfigurer 
<https://apereo.github.io/cas/development/webflow/Webflow-Customization-Extensions.html>
 as 
an example. The main point in hooking your webflow with something like:
                        createTransitionForState(realsubmit, 
CasWebflowConstants.STATE_ID_SUCCESS, <DO_STEP1_ACTION>, true);
     Then create your new action and handling each transition your action 
is capable of returning:
                        val newActionState = createActionState(flow, 
<DO_STEP1_ACTION> , <step1Action>);   //step1Action is the name of your 
action class Step1Action that you have autowired
                        createTransitionForState(newActionState, 
CasWebflowConstants.STATE_ID_SUCCESS, <DO_STEP1_ACTION>);
                        createTransitionForState(newActionState, "error", 
<DO_SOMETHING_ON_ERROR);
2) Next create your action class. Look at a cas example 
<https://github.com/apereo/cas/blob/6e29bc0001e3c304375efc5f8cbb04918d8f8691/support/cas-server-support-yubikey-core/src/main/java/org/apereo/cas/adaptors/yubikey/web/flow/YubiKeyAuthenticationWebflowAction.java>
 
to model you class from. Place your logic inside of doExecute(). You 
doExecute must return an event. To keep it simple let say it all goes well 
or it fails. In such case either return success or error:
            if(allGoo) {
                 return super.success();
           } else {
                super.error();
           }

3) Finally, at your final step of your custom webflow, you want to go back 
tot he TicketGrantingTicket
                 val newActionState = createActionState(flow, 
<DO_STEP2_ACTION>,  < step2Action  >  );          //step2Action is the name 
of your action class Step2Action that you have autowired
                        createTransitionForState(newActionState, 
CasWebflowConstants.STATE_ID_SUCCESS, 
CasWebflowConstants.STATE_ID_CREATE_TICKET_GRANTING_TICKET);        
                        
4) Next, you'll need to tell spring about your configuration. Create a 
spring.factories file inside src/main/resources/META-INF. Include a 
reference to your configurer class:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.apereo.cas.config.Step1Configurer,\
org.apereo.cas.config.Step2Configurer

Good luck, hope this provides some useful insight.
-psv
                        

On Wednesday, January 26, 2022 at 10:50:55 AM UTC-6 spfma...@e.mail.fr 
wrote:

> Hi,
>  
> I am trying to replace an old CAS 3.5, and having been far from this 
> product during all these years, things have changed a lot !
>  
> After some trials and errors, I was able to clone the overlay repo, 
> extract the fragments I needed to customize and build the WAR.
>  
> Then I managed to add the required dependencies to get a working LDAP auth 
> source (unfortunately without pooling) and a JSON services registry, and 
> build a more complete WAR.
>  
> But now I am facing a problem I can not solve : the old CAS had some 
> customized webflow and some Java code to provide dynamic authentication 
> depending on a list of network addresses (either direct LDAP or SPNEGO) 
>  
> I guess adapting this part will be something, but right now I am 
> struggling at the very first step !
>  
> Wanting to give a try to this example : 
> https://apereo.github.io/cas/6.4.x/webflow/Webflow-Customization-Extensions.html
>  I 
> am not able to compile " SomethingConfiguration" and I get the following 
> errors :
>  
> /opt/cas/src/main/java/org/example/something/SomethingConfiguration.java:5: 
> error: cannot find symbol
> public class SomethingConfiguration implements 
> CasWebflowExecutionPlanConfigurer {
> ^
> symbol: class CasWebflowExecutionPlanConfigurer
> /opt/cas/src/main/java/org/example/something/SomethingConfiguration.java:3: 
> error: cannot find symbol
> @Configuration("somethingConfiguration")
> ^
> symbol: class Configuration
> /opt/cas/src/main/java/org/example/something/SomethingConfiguration.java:4: 
> error: cannot find symbol
> @EnableConfigurationProperties(CasConfigurationProperties.class)
> ^
> symbol: class EnableConfigurationProperties
> /opt/cas/src/main/java/org/example/something/SomethingConfiguration.java:8: 
> error: cannot find symbol
> private CasConfigurationProperties casProperties;
> ^
> symbol: class CasConfigurationProperties
> location: class SomethingConfiguration
> /opt/cas/src/main/java/org/example/something/SomethingConfiguration.java:12: 
> error: cannot find symbol
> private FlowDefinitionRegistry loginFlowDefinitionRegistry;
> ^
> symbol: class FlowDefinitionRegistry
> location: class SomethingConfiguration
> /opt/cas/src/main/java/org/example/something/SomethingConfiguration.java:15: 
> error: cannot find symbol
> private ApplicationContext applicationContext;
> ^
> symbol: class ApplicationContext
> location: class SomethingConfiguration
> /opt/cas/src/main/java/org/example/something/SomethingConfiguration.java:18: 
> error: cannot find symbol
> private FlowBuilderServices flowBuilderServices;
> ^
> symbol: class FlowBuilderServices
> location: class SomethingConfiguration
> /opt/cas/src/main/java/org/example/something/SomethingConfiguration.java:22: 
> error: cannot find symbol
> public CasWebflowConfigurer somethingWebflowConfigurer() {
> ^
> symbol: class CasWebflowConfigurer
> location: class SomethingConfiguration
> /opt/cas/src/main/java/org/example/something/SomethingConfiguration.java:28: 
> error: cannot find symbol
> public void configureWebflowExecutionPlan(final CasWebflowExecutionPlan 
> plan) {
> ^
> symbol: class CasWebflowExecutionPlan
> location: class SomethingConfiguration
> /opt/cas/src/main/java/org/example/something/SomethingConfiguration.java:4: 
> error: cannot find symbol
> @EnableConfigurationProperties(CasConfigurationProperties.class)
> ^
> symbol: class CasConfigurationProperties
> /opt/cas/src/main/java/org/example/something/SomethingConfiguration.java:7: 
> error: cannot find symbol
> @Autowired
> ^
> symbol: class Autowired
> location: class SomethingConfiguration
> /opt/cas/src/main/java/org/example/something/SomethingConfiguration.java:10: 
> error: cannot find symbol
> @Autowired
> ^
> symbol: class Autowired
> location: class SomethingConfiguration
> /opt/cas/src/main/java/org/example/something/SomethingConfiguration.java:11: 
> error: cannot find symbol
> @Qualifier("loginFlowRegistry")
> ^
> symbol: class Qualifier
> location: class SomethingConfiguration
> /opt/cas/src/main/java/org/example/something/SomethingConfiguration.java:14: 
> error: cannot find symbol
> @Autowired
> ^
> symbol: class Autowired
> location: class SomethingConfiguration
> /opt/cas/src/main/java/org/example/something/SomethingConfiguration.java:17: 
> error: cannot find symbol
> @Autowired
> ^
> symbol: class Autowired
> location: class SomethingConfiguration
> /opt/cas/src/main/java/org/example/something/SomethingConfiguration.java:20: 
> error: cannot find symbol
> @ConditionalOnMissingBean(name = "somethingWebflowConfigurer")
> ^
> symbol: class ConditionalOnMissingBean
> location: class SomethingConfiguration
> /opt/cas/src/main/java/org/example/something/SomethingConfiguration.java:21: 
> error: cannot find symbol
> @Bean
> ^
> symbol: class Bean
> location: class SomethingConfiguration
>  
> It seems SpringBoot dependencies are not satisfied (I discovered all the 
> concepts ten days ago so I might be wrong)  but after "finding", "greping" 
> and adding dozens of combinations like these, nothing has improved  :
>  
> implementation 
> "org.apereo.cas:cas-server-core-api-configuration-model:${project.'cas.version'}"
> implementation 
> "org.apereo.cas:cas-server-core-configuration:${project.'cas.version'}"
> implementation 
> "org.apereo.cas:cas-server-core-webflow-api:${project.'cas.version'}"
> implementation 
> "org.apereo.cas:cas-server-core-web-api:${project.'cas.version'}"
> implementation 
> "org.apereo.cas:cas-server-core-util:${project.'cas.version'}"
> implementation 
> "org.apereo.cas:cas-server-core-configuration-api:${project.'cas.version'}"
>  
> I used the "build.gradle" provided in the repo, just adding dependencies 
> for LDAP and JSON.
>  
> Can somebody tell me what I am missing ? 
>  
> Regards
>
> ------------------------------
> FreeMail powered by mail.fr 

-- 
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
--- 
You received this message because you are subscribed to the Google Groups "CAS 
Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to cas-user+unsubscr...@apereo.org.
To view this discussion on the web visit 
https://groups.google.com/a/apereo.org/d/msgid/cas-user/07382b33-b549-48fe-bdbe-1a6d345e71fen%40apereo.org.

Reply via email to