1.thymeleaf 的初衷是为了方便前端设计人员和后端人员的合作,基于它写的模版文件可以直接在浏览器打开,效果接近高保真原型。但thymeleaf 又提供了类似与JSP include的用法,使用模版片段的方式可以简化模版代码,但却违背了thymeleaf 的初衷(因为原生的Html并不支持模版片段,一个页面如果由多个模版片段构成,这个页面在浏览器打开时展现的效果可能就和最终效果不同,这时候你就要考虑哪些东西能放进模版片段,哪些不行)。所以前后端最佳的合作方式是UI组件化;对于一些无法组件化的UI效果,可以前端先做HTML页面,后台在其HTML标签上添加thymeleaf标签属性填充动态数据。
使用模版片段进行布局 :http://www.thymeleaf.org/doc/articles/layouts.html
2.thymeleaf3 和JSP的用法非常类似,可能是借鉴,也可能是为了争取JSP用户的目的。
thymeleaf3对HTML的语法要求不再严格,支持内联表达式(类似与el表达式的用法)可以读取内部对象(如request ,session,application)
JSP页面可以直接使用EL表达式读取内部对象(如request ,session,application)
th与JSP的对比:http://www.thymeleaf.org/doc/articles/thvsjsp.html
宠物店案例:http://www.thymeleaf.org/doc/articles/petclinic.html
3.thymeleaf3 与spring的关系,springboot使用thymeleaf作为默认的模版引擎;作为涉及权限的部分,thymeleaf提供了对spring security3,4的支持,如果是使用其他的权限框架(如:shiro)和thymeleaf整合,需要自己去实现相应的方言。
springsecurity方言的使用: https://github.com/thymeleaf/thymeleaf-extras-springsecurity
----------------------
以下是一个demo案例整合了springboot 1.5.X+thymeleaf3 +springsecurity4;
源码地址:https://gitee.com/json20080301/spring-boot-spring-security-thymeleaf.git
访问方式:http://127.0.0.1:8081/security/
1.演示thymeleaf3 获取内部对象内容和springsecurity4登录人员信息和权限
2.演示不同用户访问不同的页面:1.可以匿名访问的 2.身份认证后可以访问的 3.不同用户权限才可以访问的,配置见springsecurityConfig
3.自定义FilterInvocationSecurityMetadataSource的接口实现类ProtectedUrlSecurityMetadataSource可以实现从Map<String,String>中加载URL和权限的对应关系,读者稍加封装即可实现从数据库中加载URL和权限的对应关系,配置见springsecurityConfig的buildProtectedUrlFilter()方法。
4.ProtectedUrlSecurityMetadataSource提供外部加载URL和权限的对应关系的方法loadSecurityMetadataSourceFromUrlMap(Map<String, String> urlMap) ,你可以先从数据库中读取URL和权限的配置,然后调用loadSecurityMetadataSourceFromUrlMap,URL拦截规则就相应的改变啦。
后续计划:提供自定义身份认证的案例,基于JWT来实现。