Continuing the saga... I thought I had this working, but ran into
problems trying to promote these updates to another server. I'm having
some difficulty consistently determining the combination of factors under
which it works with both Java 1.8 and Tomcat 8. It seems to reliably work
with Java 1.8 and Tomcat 6, so I think the focus is on Tomcat 8. It seems
to reliably not work with Tomcat 8 if I do a "clean" deployment where I
delete tomcat's /work/Catalina and /webapps/cas directories so
/webapps/cas.war is exploded on startup.
I increased logging levels to try and glean more info, but it's kind of
like trying to drink from a firehose. Here are some excerpts I hope are
most relevant below.
Any suggestions or additional troubleshooting tips would be most welcome.
Environment:
INFO: Server version: Apache Tomcat/8.0.20
INFO: JVM Version: 1.8.0_31-b13
CAS starts up:
2015-03-17 15:22:16,244 INFO
[org.springframework.web.servlet.DispatcherServlet] - <FrameworkServlet 'cas':
initialization completed in 3074 ms>
2015-03-17 15:22:16,244 DEBUG
[org.springframework.web.servlet.DispatcherServlet] - <Servlet 'cas' configured
successfully>
Mar 17, 2015 3:22:16 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deployment of web application archive /home/cas/tomcat/webapps/cas.war
has finished in 31,933 msMar 17, 2015 3:22:16 PM
org.apache.catalina.startup.Catalina start
INFO: Server startup in 32322 ms
CAS initial housekeeping:
2015-03-17 15:22:21,073 INFO
[org.jasig.cas.ticket.registry.support.DefaultTicketRegistryCleaner] -
<Beginning ticket cleanup.>
2015-03-17 15:22:21,074 DEBUG
[org.jasig.cas.ticket.registry.support.DefaultTicketRegistryCleaner] -
<Attempting to acquire ticket cleanup lock.>
2015-03-17 15:22:21,075 DEBUG
[org.jasig.cas.ticket.registry.support.DefaultTicketRegistryCleaner] -
<Acquired lock. Proceeding with cleanup.>
2015-03-17 15:22:21,075 INFO
[org.jasig.cas.ticket.registry.support.DefaultTicketRegistryCleaner] - <0
tickets found to be removed.>
2015-03-17 15:22:21,075 DEBUG
[org.jasig.cas.ticket.registry.support.DefaultTicketRegistryCleaner] -
<Releasing ticket cleanup lock.>
2015-03-17 15:22:21,075 INFO
[org.jasig.cas.ticket.registry.support.DefaultTicketRegistryCleaner] -
<Finished ticket cleanup.>
Attempt to load /cas/login:
Mar 17, 2015 3:22:31 PM org.apache.catalina.authenticator.AuthenticatorBase
invoke
FINE: Security checking request GET /cas/login
Mar 17, 2015 3:22:31 PM org.apache.catalina.realm.RealmBase
findSecurityConstraints
FINE: No applicable constraints defined
Mar 17, 2015 3:22:31 PM org.apache.catalina.authenticator.AuthenticatorBase
invoke
FINE: Not subject to any constraint
2015-03-17 15:22:31,754 DEBUG
[org.springframework.web.servlet.DispatcherServlet] - <DispatcherServlet with
name 'cas' processing GET request for [/cas/login]>
2015-03-17 15:22:31,757 DEBUG
[org.springframework.webflow.mvc.servlet.FlowHandlerMapping] - <Mapping request
with URI '/cas/login' to flow with id 'login'>
2015-03-17 15:22:31,761 DEBUG
[org.springframework.web.servlet.DispatcherServlet] - <Last-Modified value for
[/cas/login] is: -1>
2015-03-17 15:22:31,784 DEBUG
[org.springframework.webflow.executor.FlowExecutorImpl] - <Launching new
execution of flow 'login' with input null>
2015-03-17 15:22:31,785 DEBUG
[org.springframework.webflow.definition.registry.FlowDefinitionRegistryImpl] -
<Getting FlowDefinition with id 'login'>
2015-03-17 15:22:31,785 DEBUG
[org.springframework.webflow.engine.builder.DefaultFlowHolder] - <Assembling
the flow for the first time>
2015-03-17 15:22:32,476 DEBUG [org.jasig.cas.web.support.CasArgumentExtractor]
- <Extractor did not generate service.>
2015-03-17 15:22:32,478 DEBUG [org.jasig.cas.web.support.SamlArgumentExtractor]
- <Extractor did not generate service.>
2015-03-17 15:22:32,478 DEBUG
[org.springframework.webflow.execution.ActionExecutor] - <Finished executing
org.jasig.cas.web.flow.InitialFlowSetupAction@591156e; result = success>
2015-03-17 15:22:32,478 DEBUG
[org.springframework.webflow.execution.AnnotatedAction] - <Clearing action
execution attributes map[[empty]]>
2015-03-17 15:22:32,478 DEBUG
[org.springframework.webflow.execution.ActionExecutor] - <Finished executing
[EvaluateAction@3c57b981 expression = initialFlowSetupAction, resultExpression
= [null]]; result = success>
2015-03-17 15:22:32,478 DEBUG
[org.springframework.webflow.engine.DecisionState] - <Entering state
'ticketGrantingTicketExistsCheck' of flow 'login'>
015-03-17 15:22:33,237 DEBUG [org.springframework.webflow.engine.ViewState] -
<Rendering + [ServletMvcView@239fddbf view =
org.springframework.web.servlet.view.JstlView: name 'casLoginView'; URL
[/WEB-INF/view/jsp/default/ui/casLoginView.jsp]]>
2015-03-17 15:22:33,270 DEBUG
[org.springframework.webflow.mvc.view.AbstractMvcView] - <Rendering MVC
[org.springframework.web.servlet.view.JstlView: name 'casLoginView'; URL
[/WEB-INF/view/jsp/default/ui/casLoginView.jsp]] with model map
[{viewScope=map['commandName' -> 'credentials'], warnCookieValue=false,
credentials=[username: null], flowExecutionUrl=/cas/login?,
loginTicket=LT-1-leUZtfmqIfaAZatmfw2347JqzYfm35,
org.springframework.validation.BindingResult.credentials=org.springframework.webflow.mvc.view.BindingModel:
0 errors, flowRequestContext=[RequestControlContextImpl@77513131
externalContext =
org.springframework.webflow.mvc.servlet.MvcExternalContext@34b8b2e4,
currentEvent = success, requestScope = map[[empty]], attributes = map[[empty]],
messageContext = [DefaultMessageContext@564e5af5 sourceMessages = map[[null] ->
list[[empty]]]], flowExecution = [FlowExecutionImpl@7364ae2e flow = 'login',
flowSessions = list[[FlowSessionImpl@3a4e4692 flow = 'login', state =
'viewLoginForm', scope = map['viewScope' -> map['commandName' ->
'credentials'], 'warnCookieValue' -> false, 'credentials' -> [username: null],
'service' -> [null], 'loginTicket' -> 'LT-1-leUZtfmqIfaAZatmfw2347JqzYfm35',
'ticketGrantingTicketId' -> [null]]]]]], commandName=credentials,
currentUser=null, flowExecutionKey=e1s1, service=null,
ticketGrantingTicketId=null, flashScope=map[[empty]]}]>
2015-03-17 15:22:33,517 DEBUG
[org.springframework.webflow.engine.impl.FlowExecutionImpl] - <Attempting to
handle [org.springframework.webflow.execution.FlowExecutionException: Exception
thrown in state 'viewLoginForm' of flow 'login'] with root cause
[org.apache.jasper.JasperException: The absolute uri:
http://java.sun.com/jsp/jstl/functions cannot be resolved in either web.xml or
the jar files deployed with this application]>
2015-03-17 15:22:33,517 DEBUG
[org.springframework.webflow.engine.impl.FlowExecutionImpl] - <Rethrowing
unhandled flow execution exception>
2015-03-17 15:22:33,523 DEBUG
[org.springframework.web.servlet.DispatcherServlet] - <Could not complete
request>
org.springframework.webflow.execution.FlowExecutionException: Exception thrown
in state 'viewLoginForm' of flow 'login'
at
org.springframework.webflow.engine.impl.FlowExecutionImpl.wrap(FlowExecutionImpl.java:569)
at
org.springframework.webflow.engine.impl.FlowExecutionImpl.start(FlowExecutionImpl.java:226)
at
org.springframework.webflow.executor.FlowExecutorImpl.launchExecution(FlowExecutorImpl.java:140)
at
org.springframework.webflow.mvc.servlet.FlowHandlerAdapter.handle(FlowHandlerAdapter.java:193)
at
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
at
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
at
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
at
org.jasig.cas.web.init.SafeDispatcherServlet.service_aroundBody2(SafeDispatcherServlet.java:115)
at
org.jasig.cas.web.init.SafeDispatcherServlet.service_aroundBody3$advice(SafeDispatcherServlet.java:44)
at
org.jasig.cas.web.init.SafeDispatcherServlet.service(SafeDispatcherServlet.java:1)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.jasig.cas.security.SecurityFilter.doFilter(SecurityFilter.java:64)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
com.github.inspektr.common.web.ClientInfoThreadLocalFilter.doFilter(ClientInfoThreadLocalFilter.java:63)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
at
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516)
at
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1086)
at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:659)
at
org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223)
at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1558)
at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1515)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalStateException: Exception occurred rendering view
org.springframework.web.servlet.view.JstlView: name 'casLoginView'; URL
[/WEB-INF/view/jsp/default/ui/casLoginView.jsp]
at
org.springframework.webflow.mvc.view.AbstractMvcView.render(AbstractMvcView.java:184)
at
org.springframework.webflow.engine.ViewState.render(ViewState.java:314)
at
org.springframework.webflow.engine.ViewState.doEnter(ViewState.java:208)
at org.springframework.webflow.engine.State.enter(State.java:194)
at
org.springframework.webflow.engine.Transition.execute(Transition.java:227)
at
org.springframework.webflow.engine.impl.FlowExecutionImpl.execute(FlowExecutionImpl.java:391)
at
org.springframework.webflow.engine.impl.RequestControlContextImpl.execute(RequestControlContextImpl.java:214)
at
org.springframework.webflow.engine.TransitionableState.handleEvent(TransitionableState.java:119)
at org.springframework.webflow.engine.Flow.handleEvent(Flow.java:555)
at
org.springframework.webflow.engine.impl.FlowExecutionImpl.handleEvent(FlowExecutionImpl.java:386)
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:227)
at
org.springframework.webflow.engine.DecisionState.doEnter(DecisionState.java:51)
at org.springframework.webflow.engine.State.enter(State.java:194)
at
org.springframework.webflow.engine.Transition.execute(Transition.java:227)
at
org.springframework.webflow.engine.DecisionState.doEnter(DecisionState.java:51)
at org.springframework.webflow.engine.State.enter(State.java:194)
at org.springframework.webflow.engine.Flow.start(Flow.java:535)
at
org.springframework.webflow.engine.impl.FlowExecutionImpl.start(FlowExecutionImpl.java:364)
at
org.springframework.webflow.engine.impl.FlowExecutionImpl.start(FlowExecutionImpl.java:222)
... 45 more
Caused by: org.apache.jasper.JasperException: The absolute uri:
http://java.sun.com/jsp/jstl/functions cannot be resolved in either web.xml or
the jar files deployed with this application
at
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:55)
at
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:277)
at
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:75)
at
org.apache.jasper.compiler.TagLibraryInfoImpl.generateTldResourcePath(TagLibraryInfoImpl.java:240)
at
org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:124)
at
org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:411)
at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:469)
at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1430)
at org.apache.jasper.compiler.Parser.parse(Parser.java:139)
at
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:227)
at
org.apache.jasper.compiler.ParserController.parse(ParserController.java:100)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:199)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:356)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:336)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:323)
at
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:570)
at
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:356)
at
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:721)
at
org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:466)
at
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:391)
at
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:318)
at
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
at
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
at
org.springframework.webflow.mvc.servlet.ServletMvcView.doRender(ServletMvcView.java:50)
at
org.springframework.webflow.mvc.view.AbstractMvcView.render(AbstractMvcView.java:180)
... 66 more
On Wed, Mar 11, 2015 at 07:15:10PM -1000, Baron Fujimoto wrote:
>Following up my own reply (should have made a token effort at researching
>this first).
>
>This seems to work. Add the following to configuration for the
>maven-war-plugin build instructions in pom.xml:
>
><packagingExcludes>WEB-INF/lib/aspectjweaver-1.6.*.jar</packagingExcludes>
>
>i.e.:
>
> <build>
> <plugins>
> <plugin>
> <artifactId>maven-war-plugin</artifactId>
> <configuration>
> <warName>cas</warName>
>
> <packagingExcludes>WEB-INF/lib/aspectjweaver-1.6.*.jar</packagingExcludes>
> </configuration>
> </plugin>
> </plugins>
> </build>
>
>Of course if there's a better way to accomplish this, I'm all ears.
>
>Aloha,
>-baron
>
>On Wed, Mar 11, 2015 at 07:00:07PM -1000, Baron Fujimoto wrote:
>>Ah! Yes, both of these were in the war file:
>>
>>WEB-INF/lib/aspectjweaver-1.6.10.jar
>>WEB-INF/lib/aspectjweaver-1.8.5.jar
>>
>>Mahalo for your insight. When I deleted aspectjweaver-1.6.10.jar from the
>>war file, CAS deployed without error.
>>
>>I suppose the quesion now is, how do you prevent Maven from including
>>the old version?
>>
>>Aloha,
>>-baron
>>
>>On Wed, Mar 11, 2015 at 10:48:56PM -0500, Richard Frovarp wrote:
>>>Check the lib directory. Are you ending up with two versions of that
>>>library?
>>>
>>>I'm interested in what you find out / do. We have 3.4.12 against Tomcat 7
>>>that we need to take from Java 7 to Java 8 here shortly. CAS is the one
>>>thing I haven't tested yet.
>>>
>>>On Wed, Mar 11, 2015 at 10:19 PM, Baron Fujimoto <[email protected]> wrote:
>>>
>>>> I'm in the process of updating the our CAS 3 software infrastructure. We
>>>> were running CAS 3.4.11, with Java 1.6.x under Tomcat 6.0.x. I'd like to
>>>> get these software versions to their current releases. My plan was first
>>>> to update Java (1.8.x) and Tomcat (8.0.x), and when I was satisfied that
>>>> was working as expected, update CAS to 3.5.3 (updating to CAS 4 is a
>>>> project for another day).
>>>>
>>>> After updating Java and Tomcat however, I've run into problems redeploying
>>>> CAS. Maven appears to build the war file ok, but when I launch the webapp,
>>>> I encounter the following exceptions:
>>>>
>>>> INFO: Deploying web application archive /home/cas/tomcat/webapps/cas.war
>>>> org.aspectj.apache.bcel.classfile.ClassFormatException: Invalid byte tag
>>>> in constant pool: 15
>>>> at
>>>> org.aspectj.apache.bcel.classfile.Constant.readConstant(Constant.java:133)
>>>> at
>>>> org.aspectj.apache.bcel.classfile.ConstantPool.<init>(ConstantPool.java:45)
>>>> at
>>>> org.aspectj.apache.bcel.classfile.ClassParser.readConstantPool(ClassParser.java:186)
>>>> at
>>>> org.aspectj.apache.bcel.classfile.ClassParser.parse(ClassParser.java:131)
>>>> at
>>>> org.aspectj.apache.bcel.util.NonCachingClassLoaderRepository.loadJavaClass(NonCachingClassLoaderRepository.java:262)
>>>> at
>>>> org.aspectj.apache.bcel.util.NonCachingClassLoaderRepository.loadClass(NonCachingClassLoaderRepository.java:242)
>>>> at
>>>> org.aspectj.apache.bcel.util.NonCachingClassLoaderRepository.loadClass(NonCachingClassLoaderRepository.java:249)
>>>> at
>>>> org.aspectj.weaver.reflect.Java15AnnotationFinder.getAnnotations(Java15AnnotationFinder.java:202)
>>>> at
>>>> org.aspectj.weaver.reflect.ReflectionBasedResolvedMemberImpl.unpackAnnotations(ReflectionBasedResolvedMemberImpl.java:211)
>>>> at
>>>> org.aspectj.weaver.reflect.ReflectionBasedResolvedMemberImpl.hasAnnotation(ReflectionBasedResolvedMemberImpl.java:163)
>>>> at
>>>> org.aspectj.weaver.patterns.ExactAnnotationTypePattern.matches(ExactAnnotationTypePattern.java:109)
>>>> at
>>>> org.aspectj.weaver.patterns.ExactAnnotationTypePattern.matches(ExactAnnotationTypePattern.java:96)
>>>> at
>>>> org.aspectj.weaver.patterns.AnnotationPointcut.matchInternal(AnnotationPointcut.java:156)
>>>> [...]
>>>>
>>>> A little cursory Googling suggested that with Java 8, you need AspectJ
>>>> 1.8, so I added the following to pom.xml:
>>>>
>>>> <dependency>
>>>> <groupId>org.aspectj</groupId>
>>>> <artifactId>aspectjweaver</artifactId>
>>>> <version>1.8.5</version>
>>>> </dependency>
>>>>
>>>> After I rebuild and deploy, I still see the same exceptions though. Am I
>>>> on the right
>>>> path at all with this? Any suggestions would be appreicated.
>>>>
>>>> Aloha,
>>>> -baron
>>>> --
>>>> Baron Fujimoto <[email protected]> :: UH Information Technology Services
>>>> minutas cantorum, minutas balorum, minutas carboratum desendus pantorum
>>>>
>>>> --
>>>> You are currently subscribed to [email protected] as:
>>>> [email protected]
>>>> To unsubscribe, change settings or access archives, see
>>>> http://www.ja-sig.org/wiki/display/JSG/cas-user
>
>--
>Baron Fujimoto <[email protected]> :: UH Information Technology Services
>minutas cantorum, minutas balorum, minutas carboratum desendus pantorum
--
Baron Fujimoto <[email protected]> :: UH Information Technology Services
minutas cantorum, minutas balorum, minutas carboratum desendus pantorum
--
You are currently subscribed to [email protected] as:
[email protected]
To unsubscribe, change settings or access archives, see
http://www.ja-sig.org/wiki/display/JSG/cas-user