Some further information...

We now think that perhaps this issue is due to the the Thymeleaf  
configuration and are investigating that.

Reasoning: 

Using this blog 
<https://www.mscharhag.com/spring/resource-versioning-with-spring-mvc> as a 
base and modify it's source example 
<https://github.com/mscharhag/blog-examples/tree/master/spring-resource-versioning>
 to 
use Spring Boot 1.4.2 with *spring-boot-starter-thymeleaf* and setting the  
server.contextPath to  /cas  in application.properties, we see that an 
anchor like:

<a 
th:href="${@mvcResourceUrlProvider.getForLookupPath('/javascript/test.js')}">Test</a>


Will render as:

<a href="/cas/javascript/test-44636fcec8502b1e2cb022922a819a53.js">Test</a>>


Where as the same tag in CAS loginForm.html will render *without the root 
context:*

          <a href="/javascript/test-44636fcec8502b1e2cb022922a819a53.js">
Test</a>

So I'm thinking there must be a different between the 
*spring-boot-starter-thymeleaf* configuration and CAS's Thymeleaf 
configuration. Perhaps in How the SpringEL set up of dialect?

Can anyone give me a pointer at to where to look for that in CAS code?


On Thursday, January 11, 2018 at 10:45:50 AM UTC-7, John Sampson wrote:
>
> Hello, I'm currently upgrading a highly customized 4.X CAS version to 
> 5.0.6 and running into a problem with cached assets on our F5 Appliance. 
>
> The problem is that many of the customized assets have the same name (ex. 
> cas.js) but different content, and while we can clear the F5 Ram Cache, 
> this does not allow us the flexibility to switch cleanly back and 
> forth between the two versioned deployments and we would rather add 
> a VersionResourceResolver to the newer version (5.0.X) of the application 
> so that all assets have hash codes in the file names so that the F5 
> appliance will cache the proper version, and the two applications will not 
> be getting one another's assets. 
>
>  If someone has already done this and could provide some pointers I would 
> appreciate it. I think I'm half way there, but am not sure I'm not mixing 
> solutions. We have a desire to get away from our highly customized versions 
> and back inline with the direction of the underlying CAS software (and this 
> is out first step).
>
> I've read several articles and gotten as far as encoding the urls in the 
> templates, but when the login page is accessed, the server returns a 404 
> for the javascript assets, so here is what I have in the 5.0.6 application:
>
> *Background/Environment:*
>
>  
>
>    - Software: CAS 5.0.6 built with an overlay
>    - Application.properties in src/main/resources
>    - JavaScript resources in: src/main/resources/static/js
>    - Thymeleaf templates in in: src/main/resources/static/templates
>    - Environment:
>       -  Local: build and run locally via a fat jar.
>       -  Everywhere else: fat jar built on Jenkins, Docker Image deployed 
>       to K8S Cluster with an F5
>    
>
> *Resources I've reviewed:*
>
>
>    - CAS User Interface Customization 
>    
> <https://apereo.github.io/cas/5.0.x/installation/User-Interface-Customization-CSSJS.html>
>  (No 
>    real info)
>    - Spring Boot 1.4.2 Reference 
>    
> <https://docs.spring.io/spring-boot/docs/1.4.2.RELEASE/reference/html/boot-features-developing-web-applications.html#boot-features-spring-mvc-static-content>
>  (Static 
>    Content, which suggests that the ResourceUrlEncodingFilter should be 
>    AutoConfigured and handled internally by Thymeleaf but it doesn't seem to 
>    be, which is why I added the bean and additional syntax to the templates 
>    below).
>
>
> *Application.properties*
>
> *spring.resources.chain.strategy.content.enabled*=*true**spring.resources.chain.strategy.content.paths*=*/***
>
> *StaticResourceConfig.java*
>
> @Configuration*public class *StaticResourceConfig *extends 
> *WebMvcConfigurerAdapter {
>     @Override    *public void *addResourceHandlers(ResourceHandlerRegistry 
> registry) {
>         VersionResourceResolver versionResourceResolver = *new 
> *VersionResourceResolver()
>                 .addVersionStrategy(*new *ContentVersionStrategy(), 
> *"/js/*.js"*);
>
>         registry.addResourceHandler(*"/js/**"*)
>                 .addResourceLocations(*"classpath:/static/"*)
>                 .setCachePeriod(60 * 60 * 24 * 365) */* one year */*          
>       .resourceChain(*true*)
>                 .addResolver(versionResourceResolver);
>     }
>
>     */****     * Enables usage of versioned assets in thyme leaf templates.** 
>     * **@return*     **/*    @Bean    *public *ResourceUrlEncodingFilter 
> resourceUrlEncodingFilter(){
>         *return new *ResourceUrlEncodingFilter();
>     }
> } 
>
> *LoginForm.html* 
>
>  ... 
>
> <*script **type=**"text/javascript" 
> **th**:src=**"${@mvcResourceUrlProvider.getForLookupPath('/js/login.js')}" 
> */> 
>
> ...
>
>  
> The the script tag above  is rendered properly in the page by 
> the ResourceUrlEncodingFilter:
>
> <script type="text/javascript" 
> src="/js/login-5082a374b0db842cb10cbe96ee10ecbc.js" />
>
>
> However, the server responds with a 404 when the file is requested. 
>
> *Conculsion:*
>
> I feel like I'm missing some component that maps 
> login-5082a374b0db842cb10cbe96ee10ecbc.js back to login.js when the 
> request is received but don't know where to go and debug to look for it. 
>
> In my Google searches, I've seen a few bugs listed with regards to the 
> ordering of Resolvers and the Ant Path Matching Patterns in 
> Spring/SpringBoot, but am just getting around to figuring out which classes 
> log to debug and can report back when I find anything there, but wanted to 
> get this email in the event anyone has some experience or advice with this.
>
> Thanks,
>
> -John
>

-- 
- 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/deff15de-5f06-4211-a275-1932670e4bed%40apereo.org.

Reply via email to