第一:编辑文件 C:\Windows\System32\drivers\etc\hosts 在文件末端添加下面三条信息:
127.0.0.1 server.zhoubang85.com
127.0.0.1 client1.zhoubang85.com
127.0.0.1 client2.zhoubang85.com
第二:在tomcat的根目录下,分别建立三个目录,即server、clent1、clent2。
在三个目录下,分别都建立一个ROOT(ROOT是tomcat的主默认主页目录)文件夹。
将cas-server.xx.war解压后散放到/tomcat/server/ROOT目录下
CAS默认需要tomcat配置SSL协议,使用https协议通信的。 由于项目是企事业单位内部的系统,不需要这么高的安全级别, 可以简化操作,不走SSL协议。修改下配置文件\WEB-INF\spring-configuration\ticketGrantingTicketCookieGenerator.xml, 如下, 将默认的true改成false即可。
- <bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
- p:cookieSecure="false"
- p:cookieMaxAge="-1"
- p:cookieName="CASTGC"
- p:cookiePath="/cas" />
第三:修改tomcat配置文件,通过添加一个host节点把域名server.zhoubang85.com绑定到server里面的项目里面
<Host name="server.zhoubang85.com" appBase="server" unpackWARs="true" autoDeploy="true"> <!-- SingleSignOn valve, share authentication between web applications Documentation at: /docs/config/valve.html --> <!-- <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> --> <!-- Access log processes all example. Documentation at: /docs/config/valve.html Note: The pattern used is equivalent to using pattern="common" --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host>
第四步:先测试服务器是否可以正常使用
启动tomcat,在地址栏输入:
登录,默认用户名与密码在server的web-inf目录下的deployerConfigContext.xml里面可以看到
casuser为账号 Mellon为密码
保证在单个服务器上登录可以登录成功
用户名和密码肯定需要和数据库进行交互验证的,,那么,如何配置呢?
【说明】:我本地使用的是mysql数据库。
1、,需要将几个jar文件,放到CAS服务的lib目录下,我本地使用的jar版本分别是c3p0-0.9.1.2.jar、cas-server-support-jdbc-4.0.0.jar、mysql-connector-java-5.1.13-bin.jar,这3个缺一不可。将这3个jar放到apache-tomcat-7.0.79\server\ROOT\WEB-INF\lib目录下。
2、修改配置,支持mysql数据库交互验证
编辑apache-tomcat-7.0.79\server\ROOT\WEB-INF\deployerConfigContext.xml文件,你会看到有这样一段配置:
注释掉第二个entry配置
然后再在这个xml中新加入2个bean配置,如下:
<!-- 指定c3p0数据源 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/testdb?useUnicode=true&characterEncoding=UTF-8"/> <property name="user" value="root" /> <property name="password" value="123456"/> </bean> <!-- 访问本地数据库 --> <bean id="dbAuthHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler" p:dataSource-ref="dataSource" p:sql="SELECT u.`password` FROM `usertable` u WHERE u.`userName` = ?" />
3、修改WEB-INF\spring-configuration\applicationContext.xml
将文件中的beansnames属性改为如下:
- <util:list id="basenames">
- <value>classpath:custom_messages</value>
- <value>classpath:messages_zh_CN</value>
- </util:list>
将国际化配置文件切换为汉语
至此,CAS与数据库交互验证的配置已经配置完成,你可以重新访问cas,输入数据库中存在的用户名和密码,来看看效果如何~如果登录成功,说明配置无误。
第五步:实现客户端1,
1.新建一个web项目,通过maven添加两个客户端的依赖包
<!-- CAS Client --> <dependency> <groupId>org.jasig.cas</groupId> <artifactId>cas-client-core</artifactId> <version>3.1.10</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging --> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.3</version> </dependency>
2.编辑web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name>Archetype Created Web Application</display-name> <!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置--> <listener> <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class> </listener> <!-- 该过滤器用于实现单点登出功能,可选配置 --> <filter> <filter-name>CAS Single Sign Out Filter</filter-name> <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class> </filter> <filter-mapping> <filter-name>CAS Single Sign Out Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>CAS Filter</filter-name> <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class> <init-param> <param-name>casServerLoginUrl</param-name> <param-value>http://server.zhoubang85.com:8080/login</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://client1.zhoubang85.com:8080</param-value> </init-param> </filter> <filter-mapping> <filter-name>CAS Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 该过滤器负责对Ticket的校验工作,必须启用它 --> <filter> <filter-name>CAS Validation Filter</filter-name> <filter-class> org.jasig.cas.client.validation.Cas10TicketValidationFilter</filter-class> <init-param> <param-name>casServerUrlPrefix</param-name> <param-value>http://server.zhoubang85.com:8080</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://client1.zhoubang85.com:8080</param-value> </init-param> </filter> <filter-mapping> <filter-name>CAS Validation Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 该过滤器负责实现HttpServletRequest请求的包裹,比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 --> <filter> <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name> <filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class> </filter> <filter-mapping> <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。比如AssertionHolder.getAssertion().getPrincipal().getName()。 --> <filter> <filter-name>CAS Assertion Thread Local Filter</filter-name> <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class> </filter> <filter-mapping> <filter-name>CAS Assertion Thread Local Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
打包部署到tomcat的clent1目录下的ROOT里面,修改tomcat配置文件绑定到client1.zhoubang85.com域名
<Host name="client1.zhoubang85.com" appBase="client1" unpackWARs="true" autoDeploy="true"> <!-- SingleSignOn valve, share authentication between web applications Documentation at: /docs/config/valve.html --> <!-- <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> --> <!-- Access log processes all example. Documentation at: /docs/config/valve.html Note: The pattern used is equivalent to using pattern="common" --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host>
配置完成后,启动CAS服务端tomcat,在浏览器访问:
http://client1.zhoubang85.com:8080 看看是否跳转到了CAS认证界面
认证观察会发现浏览器的地址栏中(我用的是火狐浏览器),URL信息是这样的:
https://server.zhoubang85.com:8080/login?service=http%3A%2F%2Fclient1.zhoubang85.com%3A18080%2Fexamples%2Fservlets%2Fservlet%2FHelloWorldExample
我想你已经知道什么意思了,由于你没有登录CAS认证系统,CAS认证系统拦截到你访问的客户端应用,首先进入到认证系统登录界面,同时URL后面加上你想访问的地址信息,当你登录成功后,CAS服务会转向到你刚刚访问的地址,也就是http://client1.zhoubang85.com:8080
转向到这个地址
第五步:实现客户端2
和第一个客户端一致,不一样的地方是web.xml里面的客户端地址改成客户端2部署的地址
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name>Archetype Created Web Application</display-name> <!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置--> <listener> <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class> </listener> <!-- 该过滤器用于实现单点登出功能,可选配置 --> <filter> <filter-name>CAS Single Sign Out Filter</filter-name> <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class> </filter> <filter-mapping> <filter-name>CAS Single Sign Out Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>CAS Filter</filter-name> <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class> <init-param> <param-name>casServerLoginUrl</param-name> <param-value>http://server.zhoubang85.com:8080/login</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://client2.zhoubang85.com:8080</param-value> </init-param> </filter> <filter-mapping> <filter-name>CAS Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 该过滤器负责对Ticket的校验工作,必须启用它 --> <filter> <filter-name>CAS Validation Filter</filter-name> <filter-class> org.jasig.cas.client.validation.Cas10TicketValidationFilter</filter-class> <init-param> <param-name>casServerUrlPrefix</param-name> <param-value>http://server.zhoubang85.com:8080</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://client2.zhoubang85.com:8080</param-value> </init-param> </filter> <filter-mapping> <filter-name>CAS Validation Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 该过滤器负责实现HttpServletRequest请求的包裹,比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 --> <filter> <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name> <filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class> </filter> <filter-mapping> <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。比如AssertionHolder.getAssertion().getPrincipal().getName()。 --> <filter> <filter-name>CAS Assertion Thread Local Filter</filter-name> <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class> </filter> <filter-mapping> <filter-name>CAS Assertion Thread Local Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
打包部署到tomcat的clent2目录下的ROOT里面,修改tomcat配置文件绑定到client2.zhoubang85.com域名
配置完成后,启动CAS服务端tomcat,在浏览器访问:
http://client2.zhoubang85.com:8080 看看是否跳转到了CAS认证界面
第六步: 基本的测试访问客户端1—-> 跳转到cas server 验证 —-> 显示客户端1的应用 —->新开选项卡访问客户端2 —->显示客户端2应用 —-> 注销cas server —-> 打开客户端1/客户端2 —-> 重新跳转到cas server 验证