如下爲手動改配置文件的配置。 html
配置文件: web
一:cas-servlet.xml,路徑:cas/WEB-INF。這個是cas的MVC的配置文件,找到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" />
配置好以後以下圖所示: 緩存
仍是在此文件中,找到id爲authenticationViaFormAction的bean註釋掉,,在其下加入下圖配置,這個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,cas的spring-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和多線程,因此懶得寫博客,- -,現階段仍是學習爲先,多看大神的博客吸取知識!