各种baidu、google、biying之后实现了pentaho的cas单点登录,but,都有一个致命的问题:只有在pentaho中存在的用户才能正常登录。问题放了一段时间,可最终还是要解决的。花了几天时间,总算解决了:pentaho中用户不存在也可登录,只要cas服务器登录成功即可。
如果有兴趣知道怎么实现的可以往下慢慢看,只想快点搞定的可以直接去我的百度云盘下载附件,里面有安装手册,直接包含了如何配置cas单点登录。
云盘地址:http://pan.baidu.com/s/1dFMGwoT
最近项目中用到pentaho这个BI平台,用的是ce 6.1.0.1-196社区版。相信很多做pentaho单点登录的都已经配置过很多次cas了吧,如何配置就不再赘述了,挑重点讲下。
截取cas配置文件里面才一段代码,相信很多人对这段配置不陌生吧!
<property name="userDetailsService">
<pen:bean class="org.springframework.security.userdetails.UserDetailsService" />
</property>
注意
userDetailsService,这个是单点登录获取用户的,顶层接口只有一个方法:“loadUserByUsername”,更具用户名获取用户的,在pentaho里面有很多不同的实现,其中有一个是我们要用到的
org.pentaho.platform.security.userroledao.service.UserRoleDaoUserDetailsService,在这里我直接用如下配置替代了(有些配置
userDetailsService方式是和我一样的)
<property name="userDetailsService" ref="userDetailsService"/>
经过各种配置文件的找,发现userDetailsService的具体实现类配置在了“applicationContext-spring-security-jackrabbit.xml”这配置文件里面,具体路径配置过的人应该知道去那里找了。里面有这么一段xml配置
<bean id="userDetailsService" class="org.pentaho.platform.security.userroledao.service.UserRoleDaoUserDetailsService">
<property name="userRoleDao">
<ref bean="userRoleDaoTxn" />
</property>
......
这里才是关键,为了实现单点登录,我更改了userDetailsService的具体实现类如下:
<bean id="userDetailsService" class="com.cn.custom.UserRoleDaoUserDetailsService">
<property name="userRoleDao">
<ref bean="userRoleDaoTxn" />
</property>
......
“com.cn.custom.UserRoleDaoUserDetailsService”则是我在“org.pentaho.platform.security.userroledao.service.UserRoleDaoUserDetailsService”的基础上更改了点代码,判断,原始代码是加载用户,如果不存在就抛出异常,我却在这创建用户