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登录页面修改

  详见下篇

 

posted @ 2021-06-08 09:27  youqc  阅读(281)  评论(0编辑  收藏  举报