以下为手动改配置文件的配置。
配置文件:
一:cas-servlet.xml,路径:cas/WEB-INF。这个是cas的MVC的配置文件,找到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" />
配置好之后如下图所示:
还是在此文件中,找到id为authenticationViaFormAction的bean注释掉,,在其下加入下图配置,这个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,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。可以根据自己需要修改相应的国际化属性文件