cas实现单点登录mysql,oracle双版本
使用到的技术:
centos7、jdk1.8,tomcat8.0,nginx、mysql、oracle、springboot
1.环境搭建
1、安装jdk1.8
安装之前先检查一下系统有没有自带open-jdk 命令: rpm -qa |grep java rpm -qa |grep jdk rpm -qa |grep gcj 如果没有输入信息表示没有安装。 如果安装可以使用rpm -qa | grep java | xargs rpm -e --nodeps 批量卸载所有带有Java的文件 这句命令的关键字是java 首先检索包含java的列表 yum list java* 检索1.8的列表 yum list java-1.8* 安装1.8.0的所有文件 yum install java-1.8.0-openjdk* -y 使用命令检查是否安装成功 java -version 到此安装结束了。这样安装有一个好处就是不需要对path进行设置,自动就设置好了
2.安装tomcat
上传tomcat到linux服务器,解压tomcat包 赋值权限chmod -R 777 tomcat
3.安装mysql:MySQL安装之yum安装
. 下载并安装MySQL官方的 Yum Repository wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 使用上面的命令就直接下载了安装用的Yum Repository,大概25KB的样子,然后就可以直接yum安装了。 yum -y install mysql57-community-release-el7-10.noarch.rpm 下面就是使用yum安装MySQL了 yum -y install mysql-community-server 2. MySQL数据库设置 首先启动MySQL systemctl start mysqld.service 查看MySQL运行状态,运行状态提示:active(running) systemctl status mysqld.service 此时MySQL已经开始正常运行,不过要想进入MySQL还得先找出此时root用户的密码,通过如下命令可以在日志文件中找出密码: grep "password" /var/log/mysqld.log 上面标记的就是初始密码 如下命令进入数据库: mysql -uroot -p # 回车后会提示输入密码 输入初始密码,此时不能做任何事情,因为MySQL默认必须修改密码之后才能操作数据库: ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password'; 这里有个问题,新密码设置的时候如果设置的过于简单会报错: 这时候我们要把密码规则改一下,执行下面sql就可以了: set global validate_password_policy=0; set global validate_password_length=1; 但此时还有一个问题,就是因为安装了Yum Repository,以后每次yum操作都会自动更新,需要把这个卸载掉: yum -y remove mysql57-community-release-el7-10.noarch 配置算是完成了 问题:本地is not allowed to connect to this mysql server mysql -u root -p 登录到mysql中。 use mysql; 修改帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入MySQL后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%" update user set host = '%' where user ='root'; 刷新配置。 flush privileges;
4.配置证书(如果不需要配置请求为https可忽略)
证书的生成,需要使用到keytool,这个工具存在于jdk的bin目录 1、生成证书 keytool -genkey -alias tomcat -keyalg RSA -keystore /home/cas/keystore #生成证书保存到D盘的keystore #生成证书的时候,记住cas的域名必须保持一致 密码123456 #生成证书的时候,记住cas的域名必须保持一致 2、导出证书 #导出证书tomcat.cer,证书生成在/usr/local/cas盘 keytool -export -trustcacerts -alias tomcat -file /home/cas/tomcat.cer -keystore /home/cas/keystore 3、导入证书到jdk #删除原来的证书 rm -rf /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64/jre/lib/security/cacerts #将证书导入到jdk的目录 keytool -import -trustcacerts -alias tomcat -file /home/cas/tomcat.cer -keystore "/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64/jre/lib/security/cacerts" 4、查看证书 #查看目录下的证书 keytool -list -v -keystore "/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64/jre/lib/security/cacerts" 5.配置证书 修改tomcat的servel.xml <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <!-- A "Connector" using the shared thread pool--> <Connector port="8443" protocol="HTTP/1.1" minSpareThreads="5" maxSpareThreads="75" enableLookups="true" disableUploadTimeout="true" acceptCount="100" maxThreads="200" scheme="https" secure="true" SSLEnabled="true" clientAuth="false" sslProtocol="TLS" keystoreFile="/home/cas/keystore" keystorePass="123456"/>
5.安装cas服务端(本人先实现4.0版本,后调整为5.3版本,可供选择)
1.cas 4.0
6.配置Mysql密码登录 1、拷贝jar包 #拷贝cas-server-support-jdbc-3.5.0.jar 到cas的lib目录 cp cas-server-support-jdbc-4.0.0.jar /home/tomcat/tomcat8/webapps/cas/WEB-INF/lib/ #下载mysql驱动 wget http://yellowcong.qiniudn.com/mysql-connector-java-5.1.21.jar -O ./cas/WEB-INF/lib/mysql-connector-java-5.1.21.jar 2、配置deployerConfigContext.xml vim cas/WEB-INF/deployerConfigContext.xml <!--数据连接池--> <bean id="casDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://10.0.7.113:3306/yellowcong</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>root</value> </property> </bean> <!--MD5加密密码--> <bean id="passwordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" > <constructor-arg name="encodingAlgorithm" value="MD5"/> <property name="characterEncoding" value="UTF-8"/> </bean> <!--注释掉原来的,添加数据库密码验证--> <bean id="primaryAuthenticationHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"> <property name="dataSource" ref="casDataSource" /> <!--SELECT PASSWORD FROM yellowcong_users WHERE user_name ='yellowcong'--> <property name="sql" value="SELECT PASSWORD FROM yellowcong_users WHERE user_name =?" /> <!--如果不想要加密,可以不用添加下面的配置--> <property name="passwordEncoder" ref="passwordEncoder" /> </bean>
2. 5.3版本
注意:5.3版本打成的war包,properties配置不会生效到war包中,需要复盖到war包中的文件才可以
5.3 mysql版本 下载cas源码:https://github.com/apereo/cas-overlay-template/tree/5.3 打包完成后,在target目录下生成war 浏览器访问http://server:8080/cas/login,默认用户名和密码为casuser+Mellon,server是我的机器名称 关闭HTTPS 1.cas\WEB-INF\classes\application.properties,新增配置 cas.tgc.secure=false cas.serviceRegistry.initFromJson=true 2.cas\WEB-INF\classes\services\HTTPSandIMAPS-10000001.json,修改 "serviceId" : "^(https|http|imaps)://.*" 3.修改密码:cas\WEB-INF\classes\application.properties,修改 cas.authn.accept.users=admin::admin cas关联sql 创建mysql表并添加一条数据 DROP TABLE IF EXISTS `user_info`; CREATE TABLE `user_info` ( `uid` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) DEFAULT '' COMMENT '用户名', `password` varchar(256) DEFAULT NULL COMMENT '登录密码', `name` varchar(256) DEFAULT NULL COMMENT '用户真实姓名', `id_card_num` varchar(256) DEFAULT NULL COMMENT '用户身份证号', `state` char(1) DEFAULT '0' COMMENT '用户状态:0:正常状态,1:用户被锁定', PRIMARY KEY (`uid`), UNIQUE KEY `username` (`username`) USING BTREE, UNIQUE KEY `id_card_num` (`id_card_num`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; insert into user_info(`username`, `password`) values('admin', '123456') pom.xml添加依赖并重新打包 <dependency> <groupId>org.apereo.cas</groupId> <artifactId>cas-server-support-jdbc</artifactId> <version>${cas.version}</version> </dependency> <dependency> <groupId>org.apereo.cas</groupId> <artifactId>cas-server-support-jdbc-drivers</artifactId> <version>${cas.version}</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.21</version> </dependency> cas\WEB-INF\classes\application.properties,注释默认静态账户 # cas.authn.accept.users=casuser::Mellon cas\WEB-INF\classes\application.properties,新增 #添加jdbc认证 cas.authn.jdbc.query[0].sql=select * from user_info where username = ? #那一个字段作为密码字段 cas.authn.jdbc.query[0].fieldPassword=password #配置数据库连接 cas.authn.jdbc.query[0].url=jdbc:mysql://server:3306/cas?characterEncoding=utf8&useSSL=true cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQLDialect #数据库用户名 cas.authn.jdbc.query[0].user=root #数据库密码 cas.authn.jdbc.query[0].password=123456 #mysql驱动 cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver
oracle配置:
大致与oracle配置相同,区别如下配置:
1.pom.xml配置新增 <dependency> <groupId>org.apereo.cas</groupId> <artifactId>cas-server-support-jdbc</artifactId> <version>5.3.16</version> </dependency> <dependency> <groupId>org.apereo.cas</groupId> <artifactId>cas-server-support-jdbc-drivers</artifactId> <version>${cas.version}</version> </dependency> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>12.1.0.1-atlassian-hosted</version> </dependency> 2.修改properties配置文件 #oracle数据库配置 cas.authn.jdbc.query[0].url=jdbc:oracle:thin:@1.117.XX.XX:1521/orcl.oracledb cas.authn.jdbc.query[0].user=XX cas.authn.jdbc.query[0].password=XX cas.authn.jdbc.query[0].sql=select * from "user_info" where "username" = ? cas.authn.jdbc.query[0].fieldPassword=password cas.authn.jdbc.query[0].driverClass=oracle.jdbc.driver.OracleDriver #配置加密策略 cas.authn.jdbc.query[0].passwordEncoder.type=DEFAULT cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8 cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5
6.cas整合springboot
1.4 客户端搭建 接下来搭建springboot项目的客户端1 在新建的springboot项目的pom.xml添加如下依赖(匹配对应的版本) <dependency> <groupId>net.unicon.cas</groupId> <artifactId>cas-client-autoconfig-support</artifactId> <version>2.1.0-GA</version> </dependency> <dependency> <groupId>org.jasig.cas.client</groupId> <artifactId>cas-client-core</artifactId> <version>3.5.0</version> </dependency> 在resources下新建application.properties(或者application.yml) server.port=8088 #cas服务端的地址 cas.server-url-prefix=http://localhost:8080/cas #cas服务端的登录地址 cas.server-login-url=http://localhost:8080/cas/login #当前客户端的地址(客户端) cas.client-host-url=http://localhost:8088 #Ticket校验器使用Cas30ProxyReceivingTicketValidationFilter cas.validation-type=cas3 如果新建的是application.yml server: port: 8088 cas: server-url-prefix: http://localhost:8080/cas server-login-url: http://localhost:8080/cas/login client-host-url: http://localhost:8088 validation-type: cas3 项目启动的Application 类,代码如下: @EnableCasClient // 启动CAS @EnableCasClient @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
7.企业级cas登录页面修改
详见下篇