cas 客户端一个IP对应多个域名

公司的项目比较特殊,一个应用可以用多个域名访问,看上去没什么问题,但是集成cas就存在问题,由于安全框架使用的shiro,shiro与cas的集成也是基于spring

前面   cas-shiro文章中也给出了一个粗略的配置

可以发现casService的地址的需要配置固定的,只能配置一个,如果多个域名就没法处理,同样logoUrl也是一样 ,多域名肯定是哪个域名访问回跳就到哪个域名,但这里提供的都只能配置一个。所以这里就需要我们进行改造

1.首先我们发现logUrl其实只需要根据cas要求格式进行访问即可 例如cas服务地址为 http://china.roc/cas 要完成访问后跳转回来 只需要这样
http://china.roc/cas/login?service=http://域名/工程名/cas

所以这里对loginUrl进行了处理  首先我指定到一个servlet 在servlet中进行redirect重定向操作

2.进行了登录地址处理以后我们还得进行realm中 casService属性的处理,在进行 
ticketValidator.validate时候 需要传入casService值  但这里需要和登录时候传入值一直 否则会报错

而在realm中没法获取request对象,所以只能在可以获取到request对象的地方进行处理,考虑到并发 我采用了threadLocal  本地线程变量来保存对应的值

思路很简单 自定义了casFilter 在 onAccessDenied方法添加了保存请求地址的处理,然后在realm中 ticketValidator.validate验证时候传入threadLocal中保存的casService值

同样 logout也是一样的思路

你可能感兴趣的:(CAS-shiro,单点登录登出)