第四节:将CAS https的认证方式改为http 博客分类: java
程序员文章站
2024-02-07 13:27:58
...
一、CAS Server端的修改
1、找到cas\WEB-INF\deployerConfigContext.xml
对以下Bean增加参数p:requireSecure="false",该参数表示是否需要安全验证,即HTTPS,false为不采用,加上去之后如下:
<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
p:httpClient-ref="httpClient" p:requireSecure="false"/>
2、找到cas\WEB-INF\spring-configuration\ticketGrantingTicketCookieGenerator.xml
<beanid="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="false"
p:cookieMaxAge="-1"
p:cookieName="CASTGC"
p:cookiePath="/cas" />
参数p:cookieSecure="true",同理为HTTPS验证相关,true为采用HTTPS验证,与deployerConfigContext.xml的参数保持一致。
参数p:cookieMaxAge="-1",简单说是COOKIE的最大生命周期,-1为无生命周期,即只在当前打开的IE窗口有效,IE关闭或重新打开其它窗口,仍会要求验证。可以根据需要修改为大于0的数字,比如3600等,意思是在3600秒内,打开任意IE窗口,都不需要验证。
3、找到cas\WEB-INF\spring-configuration\warnCookieGenerator.xml
<beanid="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="false"
p:cookieMaxAge="-1"
p:cookieName="CASPRIVACY"
p:cookiePath="/cas" />
两个参数与上面同理。应保持一致。
二、修改cas-client客户端的web.xml文件。
把https://localhost:8080/cas 修改为 http://localhost:8080/cas
三、(可以忽略不记)如果存在以下文件则修改,没有则不用,CAS Client端的修改
找到客户端使用的casclient.jar文件,借用反编译工具将相应的class文件反编译成java文件再进行下面的修改
1、找到edu.yale.its.tp.cas.client.filter.edu.yale.its.tp.cas.client.filter
Java代码
if (! casValidate.startsWith("https://")){
throw new ServletException("validateUrl must start with https://, its current value is [" + casValidate + "]");
}
if (casServiceUrl != null){
if (! (casServiceUrl.startsWith("https://")|| (casServiceUrl.startsWith("http://") ))){
throw new ServletException("service URL must start with http:// or https://; its current value is [" + casServiceUrl + "]");
}
}
把这两段内容注释掉(此目录下涉及修改的类文件有CASFilter.java、CASValidateFilter.java,其实所有的修改就是把与https有关的内容加以注释)
2、找到edu.yale.its.tp.cas.util.SecureURL
Java代码
if (!u.getProtocol().equals("https")){
// IOException may not be the best exception we could throw here
// since the problem is with the URL argument we were passed, not
// IO. -awp9
log.error("retrieve(" + url + ") on an illegal URL since protocol was not https.");
throw new IOException("only 'https' URLs are valid for this method");
}
把这段内容注释掉