cas加入驗證碼以及強制密碼到期修改流程


如下爲手動改配置文件的配置。 html

配置文件: web

一:cas-servlet.xml,路徑:cas/WEB-INF。這個是casMVC的配置文件,找到handlerMappingC這個bean,在其<props></props>標籤中加入兩行配置,分別爲: spring


<prop key="/verify.htm">verifyController</prop><!--生成驗證碼控制器 -->

<prop key="/change.htm">changeController</prop><!--返回修改密碼的頁面 -->

以後在handlerMappingC總體配置下面加入兩個bean的配置,分別爲: express

<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; mvc

UsernamePasswordVCodeCredentials也是我繼承了原有的用戶名密碼實體類,新增了驗證碼(或者記住密碼字段)以後能夠在這個方法裏經過upv.getUsername(),upv.getPassword(),upv.getVcode(),取到表單提交上來的用戶名密碼驗證碼進行驗證,而且也能夠經過RequestContext的入參來得到其餘http提交的參數 app

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

的配置,配置完成以後見下圖: jsp


 

二:web.xml,路徑:cas/WEB-INF應用配置文件找到 memcached

<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和多線程,因此懶得寫博客,- -,現階段仍是學習爲先,多看大神的博客吸取知識!

相關文章
相關標籤/搜索