cas的主题配置与管理

文章目录

  • cas的主题配置与管理
    • 一、简介
    • 二、主题的配置
      • themeName与basename之间的关系
    • 三、实现原理分析
    • 四、总结

一、简介

​ cas可以实现动态多主题的管理,同一个cas访问不同的应用的时候可以做到千人千面,即根据访问服务的不同,如数据中心、开放平台,可以在一个服务端上实现不同的登录样式。

提问

  • 什么时候去新建basename?

  • 什么时候去新建theme?

当页面变化很大,不能通过配置新的css、js来实现新的主题时,可以考虑新建一套视图,如采用新的前端技术架构。这时需要新配置一个basename,否则新建theme即可。

二、主题的配置

cas配置核心文件为:cas.properties

所有的配置都和下面2个配置息息相关:

  • cas.themeResolver.defaultThemeName配置的是默认主题;

  • cas.viewResolver.basename是静态页面所在文件夹,且只能设置一个,如果页面结构、样式不去大改,我们定义一个新主题就可以啦。

目前我们的cas中共有3个主题样式:

ThemeName basename 页面映射配置
cas-theme-default custom_views custom_views.properties
cas-theme-deepBlue
cas-theme-orange

themeName与basename之间的关系

  • 引用配置

ThemeName的名称会对应到一个同名的properties文件,该文件下引用了一个css样式文件和一个js文件:

standard.custom.css.file=/css/cas.css
cas.javascript.file=/js/cas.js
  • css配置

webapps下有个themes文件夹,下一级文件夹命名与cas.viewResolver.basename中的前半段名称相匹配,如cas.viewResolver.basename=custom_views时,则文件夹的名称应为:custom

  • 视图配置——静态页面文件夹,对应basename

    我们知道CAS基本的框架是MVC,视图配置则定义了每个类与页面之间的映射关系,页面都需要使用jsp格式。

    文件路径在:src\main\webapp\WEB-INF\view\jsp*

三、实现原理分析

  • 主题解析器

cas的bean里有一个themeresolver,注入了servicesManager。实现类ServiceThemeResolver中的resolveThemeName方法查询并返回对应的主题配置信息。

    <!-- Theme Resolver --><bean id="themeResolver" class="org.jasig.cas.services.web.ServiceThemeResolver"p:defaultThemeName="${cas.themeResolver.defaultThemeName}"p:argumentExtractors-ref="argumentExtractors"p:servicesManager-ref="servicesManager"><property name="mobileBrowsers"><util:map><entry key=".*iPhone.*" value="iphone"/><entry key=".*Android.*" value="iphone"/><entry key=".*Safari.*Pre.*" value="iphone"/><entry key=".*Nokia.*AppleWebKit.*" value="iphone"/></util:map></property></bean>
    @Overridepublic String resolveThemeName(final HttpServletRequest request) {if (this.servicesManager == null) {return getDefaultThemeName();}final Service service = WebUtils.getService(this.argumentExtractors, request);final RegisteredService rService = this.servicesManager.findServiceBy(service);// retrieve the user agent string from the requestString userAgent = request.getHeader("User-Agent");if (userAgent == null) {return getDefaultThemeName();}for (final Map.Entry<Pattern, String> entry : this.overrides.entrySet()) {if (entry.getKey().matcher(userAgent).matches()) {request.setAttribute("isMobile", "true");request.setAttribute("browserType", entry.getValue());break;}}//查询为服务个性化配置的主题配置return service != null && rService != null && StringUtils.hasText(rService.getTheme())? rService.getTheme() : getDefaultThemeName();}
  • 视图解析器

    cas-servlet.xml中一个bean。

        <!-- View Resolver --><bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver"p:order="0"><property name="basenames"><util:list><value>${cas.viewResolver.basename}</value><value>protocol_views</value></util:list></property></bean>
    public class ResourceBundleViewResolver extends AbstractCachingViewResolverimplements Ordered, InitializingBean, DisposableBean {/** The default basename if no other basename is supplied. */public final static String DEFAULT_BASENAME = "views";private int order = Integer.MAX_VALUE;  // default: same as non-Ordered//我们可以看到basenames是一个数组private String[] basenames = new String[] {DEFAULT_BASENAME};
    

四、总结

cas页面、主题的正确配置方法:

  • 基于service管理的主题,其basename必须保持一致,即属于同一套视图,否则会出现报错,因为视图解析时是基于一个文件夹实现静态文件与视图的映射;反例:

  • 当页面变化很大,不能通过配置新的css、js来实现新的主题时,可以考虑新建一套视图,如采用新的前端技术架构。这时需要新配置一个basename。

  • 当页面实现技术不变,仅通过css、js即可实现样式调整,新建theme即可。

cas的主题配置与管理相关推荐

  1. CAS单点登录(五)——Service配置及管理

    在上一节我们讲述了CAS中关于自定义认证登录策略,对CAS中关于自定义登录配置的方案,校验策略有了一定的了解,如果忘记了可以去复习一下------CAS单点登录(四)--自定义认证登录策略.这节本来该 ...

  2. 英特尔分布式深度学习平台Nauta-安装、配置与管理指南

    2019独角兽企业重金招聘Python工程师标准>>> 英特尔分布式深度学习平台Nauta-安装.配置与管理指南 随着人工智能的发展,深度学习的价值不断增长,但实现它可能是一个复杂耗 ...

  3. Kafka主题(Topic)的管理

    主题的管理包括创建主题. 查看主题信息.修改主题和删除主题等操作.可以通过 Kafka 提供的 kafka-topics.sh 脚本来执行这些操作,这个脚本位于 $KAFKA_HOME/bin/目录下 ...

  4. 【Windows Server 2019】FTP服务的配置与管理——配置FTP站点(下)SSL设置及被动模式

    目录 5.5.FTP SSL设置 准备工作 (1)创建FTP用户访问组 (2)编辑FTP站点[fjnu-ftp]的权限 (3)创建SSL证书 *配置FTP SSL 验证 (1)不加密访问FTP服务 ( ...

  5. sublime html主题,自用Sublime Text 插件主题配置大全

    原则上收费的,但可以试用,试用期是免费的,在试用期间会提示你购买. package control 首先必须要介绍的就是这个,它是用来进行插件管理的,插件的安装.查看.删除都可以用package co ...

  6. Hexo 主题配置 - NexT

    hexo-theme-next 主题配置大全,图文并茂,持续更新中. 1 安装 NexT 主题 参考 hexo-theme-next 主题官网 1.1 下载 NexT 主题 建议你使用 克隆最新版本 ...

  7. 《Cisco/H3C交换机配置与管理完全手册(第2版)》终稿封面和目录

    无数网友一直殷切期待和关注的<Cisco/H3C交换机配置与管理完全手册>(第2版)一书即将于本月底正式上市了.到时对于真实读者,写书评后可以参加全额返款的抽奖活动,加入我的微博(本博客首 ...

  8. tomcat6 配置web管理端访问权限

    配置tomcat 管理端登陆 /apache-tomcat-6.0.35/conf/tomcat-users.xml 配置文件,使用时需要把注释去掉<!-- <!-- <role r ...

  9. linux下apache服务器的配置和管理(启动、重启、中断服务)

    2019独角兽企业重金招聘Python工程师标准>>> linux下apache服务器的配置和管理 一.两个重要目录: Apache有两个重要的目录: 1.配置目录/etc/http ...

最新文章

  1. 8月份Github上最热门的Python开源项目
  2. Android中edittext一些属性设置
  3. 开放搜索开源兼容版,支持Elasticsearch做搜索召回引擎
  4. 我的设计模式之旅(4)——生成器(建造者)模式Builder
  5. css菜单下拉菜单_在CSS中创建下拉菜单
  6. Powerbi实现帕累托分析
  7. power designer数据流图_鲲云公开课 | 三分钟带你了解数据流架构
  8. “很多人,到了一定年龄才明白:不要与任何人走的太近”你怎么看?
  9. JavaScript里的父、子节点操作源码解析
  10. ASP.NET自动回发的内幕
  11. Struts2-Value Stack浅析
  12. 多模态关键任务与应用综述(从表示到融合,从协同学习到关键技术梳理)
  13. Oracle解决锁表语句与批量生成解锁语句
  14. C4D教程大纲(R23)+笔记
  15. 文件预览-使用SecretID和SecretKey进行腾讯云cos桶文件预览(word、ppt等)
  16. 《天涯明月刀》服务器端3D引擎设计与开发
  17. 03.计算机网络--- 网络层、IP协议、手工配置IP地址
  18. Nginx配置基础-proxy_pass
  19. 软件开发沉思录读书笔记
  20. 苹果开发者账号注册申请流程

热门文章

  1. 【视频教程】帝国CMS制作网站系列教程13—全站全文搜索及模板
  2. YUV图像格式进行的ALPHA BLEND操作
  3. Eclipse+多国语言包插件+Tomcat插件+Lomboz插件+Myeclipse插件的安装与配置
  4. 什么样的触达方式,会员会喜欢?
  5. A类 B类 AB类 D类 K类功放简单对比
  6. 清华同方的计算机硬件设置,清华同方笔记本电脑开机进入BIOS的几种方法(F2)附bios设置图文方...
  7. 使用 SQL Server 创建唯一索引
  8. 国内的车牌识别算法怎样选择
  9. 利用Calendar类打印日历
  10. 乐忧商城项目总结-4