cas加入验证码以及强制密码到期修改流程

来源:互联网 发布:linux vim 强制保存 编辑:程序博客网 时间:2024/05/01 22:29

以下为手动改配置文件的配置。

配置文件:

一:cas-servlet.xml,路径:cas/WEB-INF。这个是casMVC的配置文件,找到handlerMappingC这个bean,在其<props></props>标签中加入两行配置,分别为:


<prop key="/verify.htm">verifyController</prop><!--生成验证码控制器 --><prop key="/change.htm">changeController</prop><!--返回修改密码的页面 -->

之后在handlerMappingC整体配置下面加入两个bean的配置,分别为:

<bean id="changeController" class="cn.com.apexsoft.code.controller.ChangePwdController" /><bean id="verifyController" class="cn.com.apexsoft.code.controller.VerifyController" />




 配置好之后如下图所示: 

还是在此文件中,找到idauthenticationViaFormActionbean注释掉,在其下加入下图配置,这个bean顾名思义是验证表单提交的用户名密码验证码(cas也提供了记住密码功能,下一篇介绍),现在我继承了原有的类,即被我注释掉的,加入我的自定义验证类,在这个类里final Credentials credentials的入参会被自动绑定,可以通过

UsernamePasswordVCodeCredentials upv = (UsernamePasswordVCodeCredentials) credentials;

UsernamePasswordVCodeCredentials也是我继承了原有的用户名密码实体类,新增了验证码(或者记住密码字段)之后可以在这个方法里通过upv.getUsername(),upv.getPassword(),upv.getVcode(),取到表单提交上来的用户名密码验证码进行验证,并且也可以通过RequestContext的入参来获得其他http提交的参数

<bean id="authenticationViaFormAction" class="cn.com.apexsoft.code.authaction.MyAuthenticationViaFormAction"p:centralAuthenticationService-ref="centralAuthenticationService"p:warnCookieGenerator-ref="warnCookieGenerator"/>

的配置,配置完成之后见下图:


 

二:web.xml,路径:cas/WEB-INF应用配置文件找到

<servlet-mapping>

                 <servlet-name>cas</servlet-name>

                 <url-pattern>/403.html</url-pattern>

</servlet-mapping>

在其下追加:

<servlet-mapping>    <servlet-name>cas</servlet-name>    <url-pattern>/verify.htm</url-pattern>  </servlet-mapping>  <servlet-mapping>    <servlet-name>cas</servlet-name>    <url-pattern>/change.htm</url-pattern>  </servlet-mapping>



配置完成效果如下图:


三:login-webflow.xml,路径:cas/WEB-INF,casspring-webflow流程文件

在文件开头,将

<var name="credentials" class="org.jasig.cas.authentication.principal.UsernamePasswordCredentials" />的配置注释掉,其下加上

<var name="credentials" class="cn.com.apexsoft.code.entity.UsernamePasswordVCodeCredentials" />的配置,配置完成后如下图:

之后还是在此文件中找到

<view-state id="viewLoginForm" view="casLoginView" model="credentials">        <binder>            <binding property="username" />            <binding property="password" />            <binding property="vcode" />        </binder>        <on-entry>            <set name="viewScope.commandName" value="'credentials'" />        </on-entry>              <transition on="submit" bind="true" validate="true" to="validatorCode">            <evaluate expression="authenticationViaFormAction.doBind(flowRequestContext, flowScope.credentials)" />        </transition></view-state>

将此配置注释掉,在其下追加:

<view-state id="viewLoginForm" view="casLoginView" model="credentials">        <binder>            <binding property="username" />            <binding property="password" />            <binding property="vcode" />        </binder>        <on-entry>            <set name="viewScope.commandName" value="'credentials'" />        </on-entry>              <transition on="submit" bind="true" validate="true" to="validatorCode">            <evaluate expression="authenticationViaFormAction.doBind(flowRequestContext, flowScope.credentials)" />        </transition></view-state>      <action-state id="validatorCode">                 <evaluate expression="authenticationViaFormAction.validatorCode(flowRequestContext, flowScope.credentials, messageContext)" />                 <transition on="error" to="generateLoginTicket" />  <!--  generateLoginTicket-->                <transition on="success" to="validatorPwd" />  <!-- 原来是realSubmit --></action-state>    <action-state id="validatorPwd">                 <evaluate expression="authenticationViaFormAction.validatorPwd(flowRequestContext, flowScope.credentials, messageContext)" />                 <transition on="error" to="realSubmit" />                 <transition on="success" to="changePwdView" /> </action-state><end-state id="changePwdView" view="changePwdView" />



配置完成后如下图:

四:messages_zh_CN.properties,路径:%CATALINA_HOME/Liferay/CASServer/WEB-INF/classes国际化配置文件:

在其中加入required.vcode=\u9A8C\u8BC1\u7801\u6709\u8BEF的配置即可

五:default_views.properties,路径:cas/WEB-INF/classes

CAS所有视图的配置文件:

加入

changePwdView.(class)=org.springframework.web.servlet.view.JstlView

changePwdView.url=/WEB-INF/changepwd.jsp

即可。

六:CAS登录页面jsp:路径:cas/WEB-INF/view/jsp/default/ui下的casLoginView.jsp。可以根据自己需要修改相应的国际化属性文件

有需要整个项目源码的可以PO我!

cas作为一个单点登录的解决方案,用起来也简单顺手,并且可以集成一些流行的cache如ehcache,memcached,jbosstreecache等来缓存ticket,甚至如果做什么系统都可以拿来一用!最近有一个想法就是把cas和spring security集成起来加入权限管理这一块!

由于cas是spring mvc+spring webflow,所以可以在基础上加入一些流程,当然不破坏cas原有的流程逻辑!最近在疯狂的看各种书,主要是关于NIO和多线程,所以懒得写博客,- -,现阶段还是学习为先,多看大神的博客吸收知识!

0 0