我的博客:www.while0.com

我的博客:www.shishangguan.net

公司需要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>

 

 

posted on 2013-04-02 15:55  money@money  阅读(513)  评论(0编辑  收藏  举报