单点登录之实战CAS5.1.x(五)——客户端定制

集成了客户端之后往往会有一些定制化的需求,比如登录界面。

根据cas官方的文档,我们可以灵活的自定义模板或者主题,具体做法是复制一份templates并重命名后放到templates文件夹下,总感觉哪里怪怪的,为什么不是default文件夹,为什么不是平级的……

好吧,懒得研究了,所以我直接去修改了templates文件夹下的html文件,这是简单便捷的方式,恢复也很简单,做个备份就好。

一般来说修改 casLoginView.html、casLogoutView.html、casGenericSuccessView.html这几个文件就已经满足我们的需求了,当然你也可以把所有的全部改掉,像casAccountDisabledView.html就是当账号被禁用时显示的页面,注意里面动态标记的内容不要去碰(尤其是login form,其他内容如果不需要可以删除),样式可以随意更改。

这里有个小小的国际化问题,中文内容如果直接写入这些html页面是会显示出乱码的,原因就是这些html其实是被当成模板加载到web容器的,不是直接调用,有2个办法,1个是官方推荐的在messages_zh_CN.properties这些资源文件中定义你的资源字符串,维护英语和中文就够了;另一个办法就是在页面中写js脚本,用脚本的方式替换资源字符串。

$('#sp').text('\u91cd\u65b0\u767b\u5f55');

自定义过滤器,由于DotNet平台下过滤器工作原理和API比较独特,因此DotNet平台下自定义过滤很简单,只需要自己控制基于form的验证即可,你可以利用web.config控制allow、deny,也可以在代码里监测identity然后根据需要强制跳转到登录页面。

if (HttpContext.Current.User.Identity.IsAuthenticated)
            {
                HttpCookie ticketCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
                FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(ticketCookie.Value);
                Response.Write(ticket.UserData + "<br />");
            }
            else
            {
                CasAuthentication.RedirectToLoginPage();
            }

Java平台下,在web.xml配置项的CAS Authentication Filter下,配置ignorePattern和ignoreUrlPatternType。

    <filter>
        <filter-name>CAS Authentication Filter</filter-name>
        <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
        <init-param>
            <param-name>casServerLoginUrl</param-name>
            <param-value>https://sso.xxx.com/cas/login</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>https://sso.xxx.com</param-value>
        </init-param>
        <init-param>
            <param-name>ignorePattern</param-name>
            <param-value>css</param-value>
        </init-param>
        <init-param>
            <param-name>ignoreUrlPatternType</param-name>
            <param-value>CONTAINS</param-value>
        </init-param>
    </filter>

上文我们将静态资源样式表排除出验证对象,官方预置了EXACT、CONTAINS、 REGEX(默认)三种模板。

如果,这三种都无法满足我们,那么就需要自己写过滤类了,建立一个空库,引入cas-client-core引用,新建一个类扩展UrlPatternMatcherStrategy接口,把自己的逻辑写进去即可。

    private String pattern;

    @Override
    public boolean matches(String url) {
        boolean ret = url.contains(pattern);
        return ret;
    }

    @Override
    public void setPattern(String str) {
        pattern = str;
    }

这段代码实现的正是官方的CONTAINS。

转载于:https://my.oschina.net/viperwhip/blog/1529307

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值