CAS 单点登录系统配置

我的博客:www.while0.com

公司需要cas可以登录的时候选择登录方式是用户名登录还是注册号登录,但cas的jdbc登录验证虽然号称有三种配置方式,但他们后台只能获取到两个字段分别是用户名和密码,至于用户名对应的字段名是在xml里边ioc注入的,而我们需要用前台传过来的值作为username的字段名。
  参考资料:

我的想法是照着jdbc验证模块的的SearchModeSearchDatabaseAuthenticationHandler开始,知道找到可以自己定义credentials类型的地方。
我发现一共需要新建5个文件,修改两个xml配置文件。原始文件是以下文件不加蓝色字体部分。
UsernamePasswordLogintypeCredentials                                                         在这个文件里边添加需要添加的login字段并且设置相应的set方法,修改hashcode方法和equals方法
UsernamePasswordLogintypeCredentialsToPrincipalResolver           具体作用不明,照抄原来的改名字即可,deployerConfigContext.xml里边要用
AbstractJdbcUsernamePasswordLogintypeAuthenticationHandler               修改方法的参数
AbstractUsernamePasswordLogintypeAuthenticationHandler           修改某些方法的参数
LogintypeSearchModeSearchDatabaseAuthenticationHandler           主验证类,全部引用和继承我们的新文件

修改deployerConfigContext.xml和login-webflow.xml
在login-webflow.xml中查找 <var name="credentials" class="这里修改为LogintypeSearchModeSearchDatabaseAuthenticationHandler的完整路径" />,超找<view-state id="viewLoginForm" view="casLoginView" model="credentials">在他下面的binder中添加<binding property="logintype" />
修改deployerConfigContext.xml中

 1     <bean id="authenticationManager"

 2         class="org.jasig.cas.authentication.AuthenticationManagerImpl">

 3         <property name="credentialsToPrincipalResolvers">

 4             <list>

 5                     <!-- 此处修改为自定义CredentialsToPrincipalResolver实现 -->

 6                 <bean class="com.bettem.icbsnet.cas.web.authentication.UsernamePasswordLogintypeCredentialsToPrincipalResolver" >

 7                     <property name="attributeRepository" ref="attributeRepository" />

 8                 </bean>

 9                 <bean

10                     class="org.jasig.cas.authentication.principal.HttpBasedServiceCredentialsToPrincipalResolver" ></bean>

11             </list>

12         </property>

13                 <bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"

14                     p:httpClient-ref="httpClient"/>

15                 

16                     <!-- 此处修改为自定义AuthenticationHandler,并取消fieldUser注入,因为fieldUser改为用后台表单提交过来的loginType数据了 -->

17                 <bean id="SearchModeSearchDatabaseAuthenticationHandler"

18                     class="com.bettem.icbsnet.cas.web.authentication.LogintypeSearchModeSearchDatabaseAuthenticationHandler">

19                     <property name="tableUsers">

20                         <value>user_user</value>

21                     </property>

22                     <property name="fieldPassword">

23                         <value>userpwd</value>

24                     </property>

25                     <property name="dataSource" ref="dataSource" />

26                     <property  name="passwordEncoder"  ref="pe"/>

27                 </bean>

28             </list>

29         </property>

30     </bean>

 

 

你可能感兴趣的:(单点登录)