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)

Go to https://localhost:8443/cas

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)

Go to https://localhost:8443/cas

Go to https://localhost:8443/cas

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)

Go to https://localhost:8443/cas

Go to https://localhost:8443/cas

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

-- 
- 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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/a/apereo.org/d/msgid/cas-user/96dd95e6-521b-4841-9925-30736302892cn%40apereo.org.

Reply via email to