zoukankan      html  css  js  c++  java
  • 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.casWEB-INFclassesapplication.properties,新增配置
                    cas.tgc.secure=false
                    cas.serviceRegistry.initFromJson=true
                2.casWEB-INFclassesservicesHTTPSandIMAPS-10000001.json,修改
                    "serviceId" : "^(https|http|imaps)://.*"
                3.修改密码:casWEB-INFclassesapplication.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>
                    
                    casWEB-INFclassesapplication.properties,注释默认静态账户
                        # cas.authn.accept.users=casuser::Mellon
                    
                    casWEB-INFclassesapplication.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登录页面修改

      详见下篇

  • 相关阅读:
    jsp常用指令
    jsp中的内置对象(9个)、作用
    collection的框架结构
    java——异常
    Spring的依赖注入(DI)三种方式
    mybatis——动态sql
    spring 中事务的PROPAGATION_REQUIRED,Readonly的解释
    Jquery ajax提交表单几种方法详解
    springmvc注解和参数传递
    springmvc和struts2的区别
  • 原文地址:https://www.cnblogs.com/youqc/p/14861427.html
Copyright © 2011-2022 走看看