您的位置:首页 > 其它

cas-server-webaap 非maven版改造以及cas-client支持filter配置excludes扩展

2014-04-09 12:39 441 查看
最近有朋友在使用cas,但是项目并没有使用maven管理,需要从官网源码改造一份非maven版的cas-server。下面是我改造后的项目。

本次修改简单介绍:

1、修改https方式为http,主要是本地测试,没想使用证书。修改部分有标注,可以按照官网源码恢复。

2、修改认证方式为数据库。添加jdbc配置,dataSource配置。其中把认证的sql抽出来作为配置项:cas.query.user=select password from t_user where username=?

3、调整log级别为debug。

有需要的朋友配置下自己的数据源,启动服务就可以访问cas-server了。

下载地址cas-server-webapp

#client#

另外,我新建了两个client用于测试,查看sso效果,这期间遇到一个奇葩的需求。朋友需要在cas-client项目中拦截一部分,其余部分不拦截,本来是一个简单的需求,但是由于历史原因,项目没有规划好路径,要拦截的路径很多很零碎,不拦截的路径有一个统一入口,在配置cas拦截url-pattern时,没办法配置(路径基本是各种各样,如果配置进去要把每一个路径放进去,一来配置项太长,二来以后没法维护了,而且没人愿意一个一个去找路径)。

既然如此,就配置url-pattern 为 /*, 只要把不拦截的配置进去,不就简单了吗。可惜的是cas并没有提供这种方式(这其实是对的,因为你配置的路径就是要被拦截的,不配置就不拦截。之所以我朋友这里这么麻烦,还不是因为垃圾设计导致的奇葩现象。)。

为此,考虑扩展client端的filter,提供一个excludes配置项,用于反其道而行之。

查看源码,找到client端配置的拦截器AuthenticationFilter,添加 private String excludes = "/admin/"; private final String exclude_splitter = ";"; 以及setter和对应的源码修改,大家懂得。记得把修改后的AuthenticationFilter,在项目的src目录下存放,package为原来的package org.jasig.cas.client.authentication;
当然你也可以修改源码,打包一个jar,但是不利于以后升级。

最后认证拦截器配置为:

<bean name="authenticationFilter"

class="org.jasig.cas.client.authentication.AuthenticationFilter">

<property name="casServerLoginUrl" value="${cas.server.loginUrl}" />

<property name="renew" value="${cas.server.renew}" />

<property name="gateway" value="${cas.server.gateway}" />

<property name="service" value="${cas.client.serverName}" />

<property name="excludes" value="${cas.client.excludes}"></property>

</bean>

下载地址cas-client

启动cas-server,cas-client, cas-client2,访问下任何一个client,不仅能实现sso,而且实现了excludes 一些path。 - _ -
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐