CAS 6.3.x, Acceptable Usage Policy, Localization : 'acceptableUsagePolicyView' of flow 'login' -- action execution attributes were 'map[[empty]]'

45 views
Skip to first unread message

Guillaume EGRON

unread,
Jul 16, 2021, 8:30:30 AM7/16/21
to CAS Community
Hello,

I am trying to build a CAS Overlay with Acceptable Usage Policy.

An error occur while rendering the AUP page on some browser, my investigation seem to point a problem with browser locale and messages bundle : my desktop runs under Windows 10, with French (France) language preference.


Steps to reproduce

CAS Overlay Template, Branch 6.3 (Source code from https://github.com/apereo/cas-overlay-template/tree/6.3)
Manually add cas-server-support-aup-webflow dependency under the dependencies block of the Gradle build script

Configuration files and directories generated via copyCasConfiguration task
Then, add cas.acceptable-usage-policy.enabled=true

Run the server web application as an executable WAR via run, inside IntelliJ IDEA 2021.1.3 (Ultimate Edition)


Log in to CAS with default credentials

Google Chrome 91.0.4472.164 (Build officiel) (64 bits)
CAS redirect to AUP page, but some elements are not translated into French (messages, accept button)

Browser DevTools shows : Response Header Content-language: fr-FR

Microsoft Edge Version 91.0.864.70 (Version officielle) (64 bits)
CAS cannot redirect to AUP page : Error: 

Browser DevTools shows : Response Header Content-language: fr

See the stacktrace at the bottom

Firefox 90.0 (64 bits)
CAS cannot redirect to AUP page : Error: 

Browser DevTools shows : Response Header Content-language: fr

See stacktrace at the bottom


CAS Overlay Template, Branch master (Source code from https://github.com/apereo/cas-overlay-template/tree/master)
Manually add cas-server-support-aup-webflow dependency under the dependencies block of the Gradle build script

Configuration files and directories generated via copyCasConfiguration task
Then, add cas.acceptable-usage-policy.enabled=true

Run the server web application as an executable WAR via run, inside IntelliJ IDEA 2021.1.3 (Ultimate Edition)



Log in to CAS with default credentials

Google Chrome 91.0.4472.164 (Build officiel) (64 bits)
CAS redirect to AUP page, but some elements are not translated into French (messages, accept button)

Browser DevTools shows : Response Header Content-language: fr-FR

Microsoft Edge Version 91.0.864.70 (Version officielle) (64 bits)
CAS cannot redirect to AUP page : Error: null

Browser DevTools shows : Response Header Content-language: fr

See stacktrace at the bottom

Firefox 90.0 (64 bits)
CAS cannot redirect to AUP page : Error: null

Browser DevTools shows : Response Header Content-language: fr

See stacktrace at the bottom


CAS WAR Overlay Template 6.4.0-RC5 with CAS Initializr

curl https://casinit.herokuapp.com/starter.tgz -d "dependencies=support-aup-webflow&casVersion=6.4.0-RC5&bootVersion=2.5.1" | tar -xzvf -

Project 6.4.0-RC5 cannot be build due to error "Could not find org.apereo.service.persondir:person-directory-impl:2.0.9-SNAPSHOT"




CAS WAR Overlay Template 6.4.0-SNAPSHOT with CAS Initializr

curl https://casinit.herokuapp.com/starter.tgz -d "dependencies=support-aup-webflow&casVersion=6.4.0-SNAPSHOT&bootVersion=2.5.2" | tar -xzvf -

Configuration files and directories generated via copyCasConfiguration task
Then, add cas.acceptable-usage-policy.core.enabled=true

Run the server web application as an executable WAR via run, inside IntelliJ IDEA 2021.1.3 (Ultimate Edition)



Log in to CAS with default credentials

Google Chrome 91.0.4472.164 (Build officiel) (64 bits)
CAS redirect to AUP page, but some elements are not translated into French (messages, accept button)

Browser DevTools shows : Response Header Content-language: fr-FR

Microsoft Edge Version 91.0.864.70 (Version officielle) (64 bits)
CAS cannot redirect to AUP page : Error: null

Browser DevTools shows : Response Header Content-language: fr

org.springframework.webflow.execution.ActionExecutionException: Exception thrown executing org.apereo.cas.web.flow.actions.ConsumerExecutionAction@453a30f8 in state 'acceptableUsagePolicyView' of flow 'login' -- action execution attributes were 'map[[empty]]'
at org.springframework.webflow.execution.ActionExecutor.execute(ActionExecutor.java:62)
at org.springframework.webflow.action.EvaluateAction.doExecute(EvaluateAction.java:77)
at org.springframework.webflow.action.AbstractAction.execute(AbstractAction.java:188)
at org.springframework.webflow.execution.ActionExecutor.execute(ActionExecutor.java:51)
at org.springframework.webflow.engine.ActionList.execute(ActionList.java:154)
at org.springframework.webflow.engine.ViewState.render(ViewState.java:291)
at org.springframework.webflow.engine.ViewState.doEnter(ViewState.java:185)
at org.springframework.webflow.engine.State.enter(State.java:194)
at org.springframework.webflow.engine.Transition.execute(Transition.java:228)
at org.springframework.webflow.engine.impl.FlowExecutionImpl.execute(FlowExecutionImpl.java:395)
at org.springframework.webflow.engine.impl.RequestControlContextImpl.execute(RequestControlContextImpl.java:214)
at org.springframework.webflow.engine.TransitionableState.handleEvent(TransitionableState.java:116)
at org.springframework.webflow.engine.Flow.handleEvent(Flow.java:547)
at org.springframework.webflow.engine.impl.FlowExecutionImpl.handleEvent(FlowExecutionImpl.java:390)
at org.springframework.webflow.engine.impl.RequestControlContextImpl.handleEvent(RequestControlContextImpl.java:210)
at org.springframework.webflow.engine.ActionState.doEnter(ActionState.java:105)
at org.springframework.webflow.engine.State.enter(State.java:194)
at org.springframework.webflow.engine.Transition.execute(Transition.java:228)
at org.springframework.webflow.engine.impl.FlowExecutionImpl.execute(FlowExecutionImpl.java:395)
at org.springframework.webflow.engine.impl.RequestControlContextImpl.execute(RequestControlContextImpl.java:214)
at org.springframework.webflow.engine.TransitionableState.handleEvent(TransitionableState.java:116)
at org.springframework.webflow.engine.Flow.handleEvent(Flow.java:547)
at org.springframework.webflow.engine.impl.FlowExecutionImpl.handleEvent(FlowExecutionImpl.java:390)
at org.springframework.webflow.engine.impl.RequestControlContextImpl.handleEvent(RequestControlContextImpl.java:210)
at org.springframework.webflow.engine.ActionState.doEnter(ActionState.java:105)
at org.springframework.webflow.engine.State.enter(State.java:194)
at org.springframework.webflow.engine.Transition.execute(Transition.java:228)
at org.springframework.webflow.engine.impl.FlowExecutionImpl.execute(FlowExecutionImpl.java:395)
at org.springframework.webflow.engine.impl.RequestControlContextImpl.execute(RequestControlContextImpl.java:214)
at org.springframework.webflow.engine.TransitionableState.handleEvent(TransitionableState.java:116)
at org.springframework.webflow.engine.Flow.handleEvent(Flow.java:547)
at org.springframework.webflow.engine.impl.FlowExecutionImpl.handleEvent(FlowExecutionImpl.java:390)
at org.springframework.webflow.engine.impl.RequestControlContextImpl.handleEvent(RequestControlContextImpl.java:210)
at org.springframework.webflow.engine.ViewState.handleEvent(ViewState.java:231)
at org.springframework.webflow.engine.ViewState.resume(ViewState.java:195)
at org.springframework.webflow.engine.Flow.resume(Flow.java:537)
at org.springframework.webflow.engine.impl.FlowExecutionImpl.resume(FlowExecutionImpl.java:259)
at org.springframework.webflow.executor.FlowExecutorImpl.resumeExecution(FlowExecutorImpl.java:168)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282)
at org.springframework.cloud.context.scope.GenericScope$LockedScopedProxyFactoryBean.invoke(GenericScope.java:485)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)
at com.sun.proxy.$Proxy244.resumeExecution(Unknown Source)
at org.springframework.webflow.mvc.servlet.FlowHandlerAdapter.handle(FlowHandlerAdapter.java:254)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1064)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:665)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
at org.apereo.cas.web.support.AuthenticationCredentialsThreadLocalBinderClearingFilter.doFilter(AuthenticationCredentialsThreadLocalBinderClearingFilter.java:28)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
at org.apereo.cas.web.support.filters.RequestParameterPolicyEnforcementFilter.doFilter(RequestParameterPolicyEnforcementFilter.java:401)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
at org.apereo.cas.web.support.filters.ResponseHeadersEnforcementFilter.doFilter(ResponseHeadersEnforcementFilter.java:200)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
at org.apereo.cas.web.support.filters.AddResponseHeadersFilter.doFilter(AddResponseHeadersFilter.java:64)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:204)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
at org.apereo.cas.logging.web.ThreadContextMDCServletFilter.doFilter(ThreadContextMDCServletFilter.java:99)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
at org.apereo.inspektr.common.web.ClientInfoThreadLocalFilter.doFilter(ClientInfoThreadLocalFilter.java:66)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:769)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.NullPointerException
at java.base/java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:936)
at java.base/java.util.Properties.getProperty(Properties.java:1104)
at org.springframework.context.support.ReloadableResourceBundleMessageSource$PropertiesHolder.getProperty(ReloadableResourceBundleMessageSource.java:603)
at org.apereo.cas.web.view.CasReloadableMessageBundle.lambda$getMessageInternal$0(CasReloadableMessageBundle.java:50)
at java.base/java.util.stream.IntPipeline$9$1.accept(IntPipeline.java:368)
at java.base/java.util.stream.Streams$RangeIntSpliterator.tryAdvance(Streams.java:82)
at java.base/java.util.stream.IntPipeline.forEachWithCancel(IntPipeline.java:163)
at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:502)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:488)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.IntPipeline.findFirst(IntPipeline.java:528)
at org.apereo.cas.web.view.CasReloadableMessageBundle.getMessageInternal(CasReloadableMessageBundle.java:52)
at org.springframework.context.support.AbstractMessageSource.getMessage(AbstractMessageSource.java:141)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282)
at org.springframework.cloud.context.scope.GenericScope$LockedScopedProxyFactoryBean.invoke(GenericScope.java:485)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)
at com.sun.proxy.$Proxy126.getMessage(Unknown Source)
at org.springframework.context.support.DelegatingMessageSource.getMessage(DelegatingMessageSource.java:60)
at org.springframework.context.support.AbstractApplicationContext.getMessage(AbstractApplicationContext.java:1368)
at org.apereo.cas.aup.BaseAcceptableUsagePolicyRepository.fetchPolicy(BaseAcceptableUsagePolicyRepository.java:74)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282)
at org.springframework.cloud.context.scope.GenericScope$LockedScopedProxyFactoryBean.invoke(GenericScope.java:485)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)
at com.sun.proxy.$Proxy164.fetchPolicy(Unknown Source)
at org.apereo.cas.config.CasAcceptableUsagePolicyWebflowConfiguration.lambda$acceptableUsagePolicyRenderAction$1(CasAcceptableUsagePolicyWebflowConfiguration.java:99)
at org.apereo.cas.web.flow.actions.ConsumerExecutionAction.execute(ConsumerExecutionAction.java:28)
at jdk.internal.reflect.GeneratedMethodAccessor150.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282)
at org.springframework.cloud.context.scope.GenericScope$LockedScopedProxyFactoryBean.invoke(GenericScope.java:485)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)
at com.sun.proxy.$Proxy160.execute(Unknown Source)
at org.springframework.webflow.execution.ActionExecutor.execute(ActionExecutor.java:51)
... 114 more

Copyright © 2005–2021 Apereo, Inc.
Powered by Apereo CAS

Firefox 90.0 (64 bits)
CAS cannot redirect to AUP page : Error: null

Browser DevTools shows : Response Header Content-language: fr

Same stacktrace as above

Guillaume EGRON

unread,
Jul 16, 2021, 9:44:55 AM7/16/21
to CAS Community, Guillaume EGRON
To complete my first message

CAS WAR Overlay Template 6.3.5 with CAS Initializr

curl https://casinit.herokuapp.com/starter.tgz -d "dependencies=support-aup-webflow&casVersion=6.3.5&bootVersion=2.3.7.RELEASE" | tar -xzvf -

Configuration files and directories generated via copyCasConfiguration task
Then, add cas.acceptable-usage-policy.core.enabled=true

Run the server web application as an executable WAR via run, inside IntelliJ IDEA 2021.1.3 (Ultimate Edition)


Log in to CAS with default credentials

Google Chrome 91.0.4472.164 (Build officiel) (64 bits)
CAS redirect to AUP page, but some elements are not translated into French (messages, accept button)

Browser DevTools shows : Response Header Content-language: fr-FR

Microsoft Edge Version 91.0.864.70 (Version officielle) (64 bits)
CAS cannot redirect to AUP page : Error: null

Browser DevTools shows : Response Header Content-language: fr

Same stacktrace as above

Firefox 90.0 (64 bits)
CAS cannot redirect to AUP page : Error: null

Browser DevTools shows : Response Header Content-language: fr

Same stacktrace as above

Guillaume EGRON

unread,
Jul 19, 2021, 5:37:23 AM7/19/21
to CAS Community, Guillaume EGRON
Hi,
solve the issue with the following properties in cas.properties
cas.acceptable-usage-policy.aup-policy-terms-attribute-name=affiliation
cas.authn.attribute-repository.stub.attributes.affiliation=groupMembership

Reply all
Reply to author
Forward
0 new messages