当服务器向CAS Client(我们自己的应用)发送请求的时候,应用会重定向到CAS服务器,然后验证服务器是否登入,如果没登陆会跳转到CAS服务器的登陆页面进行验证,如果登陆则会将票据一起携带到我们自己的应用,我们的服务器会验证票据是否正确,如果正确则访问成功,并将用户信息返回到我们的应用,如果票据错误则会报异常。
ExceptionTranslationFilter主要拦截两类安全异常:认证异常、访问拒绝异常。CAS是在ExceptionTranslationFilter前加入自己的认证器,以此来验证用户是否登陆。
去除https认证
CAS默认使用的是HTTPS协议,如果使用HTTPS协议需要SSL安全证书(需向特定的机构申请和购买) 。如果对安全要求不高或是在开发测试阶段,可使用HTTP协议。通过修改配置,让CAS使用HTTP协议。
(1)修改cas的WEB-INF/deployerConfigContext.xml
找到下面的配置
这里需要增加参数p:requireSecure=“false”,requireSecure属性意思为是否需要安全验证,即HTTPS,false为不采用
(2)修改cas的/WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml
找到下面配置
参数p:cookieSecure=“true”,同理为HTTPS验证相关,TRUE为采用HTTPS验证,FALSE为不采用https验证。
参数p:cookieMaxAge="-1",是COOKIE的最大生命周期,-1为无生命周期,即只在当前打开的窗口有效,关闭或重新打开其它窗口,仍会要求验证。可以根据需要修改为大于0的数字,比如3600等,意思是在3600秒内,打开任意窗口,都不需要验证。
我们这里将cookieSecure改为false , cookieMaxAge 改为3600
(3)修改cas的WEB-INF/spring-configuration/warnCookieGenerator.xml
找到下面配置
我们这里将cookieSecure改为false , cookieMaxAge 改为3600
配置数据源
(1)修改cas服务端中web-inf下deployerConfigContext.xml ,添加如下配置
然后在配置文件开始部分找到如下配置
其中
一句是使用固定的用户名和密码,我们在下面可以看到这两个bean ,如果我们使用数据库认证用户名和密码,需要将这句注释掉。
添加下面这一句配置
(2)将c3p0,cas-server-support-jdbc,mysql-connector-java,三个 jar包放入webapps\cas\WEB-INF\lib下
用数据库中的用户名和密码进行测试
将CAS默认的登录页更改为自己的登陆页
拷贝资源
(1)将自己登陆页login.html拷贝到cas系统下WEB-INF\view\jsp\default\ui 目录下
(2)将css js等文件夹拷贝到 cas目录下
(3) 将原来的casLoginView.jsp 改名(可以为之后的修改操作做参照),将login.html改名为casLoginView.jsp
修改页面
编辑自己的casLoginView.jsp 内容,如果需要添加样式,直接在对应的标签内加入相应的属性即可
(1)添加指令
<%@ page pageEncoding="UTF-8" %>
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
(2)修改form标签
(3)修改用户名框
(4)修改密码框
(5)修改登陆按钮
(6) 错误信息提示
在表单内加入错误提示框
测试:输入错误的用户名和密码,提示是英文。这个提示信息是在WEB-INF\classes目录下的messages.properties文件中
authenticationFailure.AccountNotFoundException=Invalid credentials.
authenticationFailure.FailedLoginException=Invalid credentials.
设置国际化为zn_CN ,修改cas-servlet.xml
我们需要将此信息拷贝到messages_zh_CN.properties下,并改为中文提示(转码)
authenticationFailure.AccountNotFoundException=\u7528\u6237\u4E0D\u5B58\u5728.
authenticationFailure.FailedLoginException=\u5BC6\u7801\u9519\u8BEF.
第一个是用户名不存在时的错误提示
第二个是密码错误的提示
org.springframework.security
spring-security-cas
4.1.0.RELEASE
org.jasig.cas.client
cas-client-core
3.3.3
org.slf4j
log4j-over-slf4j
配置完后,请求配置的自身服务器路径就会自动跳转到验证登入页面