실용적인 springboot+CAS 싱글 사인온 시스템

1. Tomcat HTTPS 지원 구축

CAS는 HTTPS 프로토콜을 사용하여 사용자 요청을 처리하므로 HTTPS 프로토콜을 지원하도록 tomcat을 구성해야 합니다.

1단계: 키 저장소 생성

우리는 jdk와 함께 제공되는 keytool 도구를 사용하여 키 저장소를 생성합니다.

keytool은 키 저장소(키 저장소) 및 인증서를 관리하기 위한 JDK(Java Development Kit)의 명령줄 도구입니다.

keytool -genkey -alias <alias> -keyalg <algorithm> -keystore <keystore> [options]
  • -genkey키 쌍을 생성하고 이를 키 저장소에 저장하는 데 사용되는 매개변수입니다.
  • -alias <alias>: 생성된 키 쌍의 별칭을 지정합니다. 별칭은 후속 작업에서 키 쌍을 식별하는 데 사용됩니다. 예를 들어, -alias mykey생성된 키 쌍은 "mykey"로 별칭이 지정됩니다.

  • -keyalg <algorithm>: 키 쌍을 생성할 때 사용되는 암호화 알고리즘을 지정합니다. 일반적으로 사용되는 암호화 알고리즘에는 RSA, DSA 및 EC가 있습니다. 예를 들어 -keyalg RSARSA 알고리즘은 키 쌍을 생성하는 데 사용됩니다.

  • -keystore <keystore>: 사용할 키스토어 파일의 경로와 이름을 지정합니다. 키 저장소는 생성된 키 쌍 및 기타 관련 정보를 저장하는 데 사용됩니다. 예를 들어 -keystore mykeystore.jks생성된 키 쌍을 "mykeystore.jks"라는 키 저장소에 저장합니다.

  • -v매개변수는 키 쌍 ​​생성 및 인증서 가져오기와 같은 작업의 세부 프로세스 및 결과를 포함하여 더 자세한 정보를 표시할 수 있는 자세한 정보 표시(자세한 모드)를 지정하는 데 사용됩니다.

  • [options]: 키 쌍 생성 옵션을 추가로 구성하기 위한 선택적 매개변수입니다. 일반적으로 사용되는 일부 옵션은 다음과 같습니다.

    • -keysize <size>: 키 길이를 지정합니다. 예를 들어 -keysize 20482048비트 키 길이를 사용합니다.
    • -validity <days>: 인증서의 유효기간(일수)을 지정합니다. 예를 들어 -validity 365인증서의 유효기간은 365일임을 의미합니다.
    • -dname <distinguished_name>: 국가, 조직, 조직 단위 등 인증서 생성에 사용되는 주체 정보를 지정합니다.
    • -storepass <password>: 키 저장소의 키 쌍에 액세스하고 관리하는 데 사용되는 키 저장소의 비밀번호를 지정합니다.

별칭 java1234, 저장경로 D:\CAS\keystore

keytool -genkey -v -alias java1234 -keyalg RSA -keystore D:\CAS\keystore\java1234.keystore

 저장경로에 다음과 같은 파일이 존재하는 것을 확인할 수 있습니다.

  2단계: 키 저장소에서 인증서 내보내기

keytool -export -trustcacerts -alias java1234 -file D:\CAS\keystore\java1234.cer -keystore D:\CAS\keystore\java1234.keystore
  • keytool: keytool 명령을 실행하는 데 사용되는 명령줄 도구의 이름입니다.
  • -export: 수행할 작업이 인증서 내보내기임을 지정합니다.
  • -trustcacerts: 인증서를 내보낼 때 신뢰할 수 있는 루트 인증서도 함께 내보내집니다.
  • -alias java1234: 내보낼 인증서의 별칭을 "java1234"로 지정합니다. 키 저장소에 별칭이 있는지 확인하세요.
  • -file D:\CAS\keystore\java1234.cer: 내보낼 인증서 파일의 경로와 이름을 지정합니다. 내보낸 인증서는 지정된 파일에 저장됩니다.
  • -keystore D:\CAS\keystore\java1234.keystore: 키스토어 파일의 경로와 이름을 지정합니다. 내보낼 인증서가 포함된 키 저장소 파일입니다.

이 명령의 목적은 별칭이 "java1234"인 인증서를 키 저장소에서 내보내고 이를 지정된 파일(D:\CAS\keystore\java1234.cer)에 저장하는 것입니다.

이 명령을 실행하기 전에 지정된 별칭을 가진 인증서가 존재하고 키 저장소 파일 경로와 파일 이름이 올바른지 확인하십시오.

 

3단계: jdk 인증서 저장소로 인증서 가져오기

keytool -import -trustcacerts -alias java1234 -file ‪D:\CAS\keystore\java1234.cer -keystore ‪D:\java\jdk1.8.0_91\jre\lib\security\cacerts

위 명령은 keytool 도구를 사용하여 인증서를 신뢰할 수 있는 루트 인증서 저장소로 가져옵니다. 다음은 명령의 각 매개변수에 대한 설명입니다.

- `keytool`: keytool 명령을 실행하는 데 사용되는 명령줄 도구의 이름입니다.
- `-import`: 수행할 작업이 인증서를 가져오는 것임을 지정합니다.
- `-trustcacerts`: 인증서를 신뢰할 수 있는 루트 인증서 저장소로 가져오는 것을 의미합니다.
- `-alias java1234`: 가져올 인증서의 별칭을 "java1234"로 지정합니다.
- `-file D:\CAS\keystore\java1234.cer`: 가져올 인증서 파일의 경로와 이름을 지정합니다. 이 인증서 파일은 가져올 인증서의 내용입니다.
- `-keystore D:\java\jdk1.8.0_91\jre\lib\security\cacerts`: 신뢰할 수 있는 루트 인증서 저장소의 경로와 이름을 지정합니다. 인증서 저장소는 신뢰할 수 있는 루트 인증서를 저장하는 데 사용되는 Java 설치 디렉터리의 cacerts 파일입니다.

이 명령의 목적은 지정된 경로에 있는 인증서 파일(D:\CAS\keystore\java1234.cer)을 Java 설치 디렉터리의 신뢰할 수 있는 루트 인증서 저장소(cacerts 파일)로 가져오고 별칭 "java1234"를 사용하는 것입니다. 그것을 식별하기 위해..

이 명령을 실행하기 전에 인증서 파일 경로와 파일 이름이 올바른지, 신뢰할 수 있는 루트 인증서 저장소의 경로와 파일 이름이 올바른지 확인하십시오. 또한 작업을 수행할 수 있는 충분한 권한이 있는지 확인하십시오.

 네 번째 단계:

톰캣 다운로드 주소: https://tomcat.apache.org/download-90.cgi

 다운로드 후 CAS 디렉토리에 압축을 풀고 D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\conf 디렉토리에 들어가 server.xml 파일을 찾으세요.

파일에 다음 코드를 추가하세요.

<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS"
               keystoreFile="D:\CAS\keystore\java1234.keystore"
               keystorePass="666666" />

그림에서 알 수 있듯이

저장 후 종료하고, D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\bin 디렉토리에 들어가서startup.bat 파일을 찾고, 더블클릭해서 열고 실행하세요.

 실행 결과는 다음과 같으며 잘못된 문자가 나타납니다.

 conf 디렉터리에 들어가서 다음 파일을 엽니다.

 파일의 java.util.logging.ConsoleHandler.encoding = UTF-8 코드를 java.util.logging.ConsoleHandler.encoding = GBK 로 수정하세요.

 bin 디렉토리를 다시 입력하고,startup.bat 파일을 시작한 후, 실행하여 잘못된 문제를 해결하십시오.

 시험

https://localhost:8443/을 방문하세요.

Tomcat에 성공적으로 액세스할 수 있다는 것은 구성이 성공적이라는 것을 의미합니다.

 2. CAS 서버전쟁 다운로드

다운로드 주소: 중앙 저장소: org/apereo/cas/cas-server-webapp-tomcat/5.3.14

 백엔드 코드를 수정해야 하는 경우 github에서 소스 코드를 다운로드하고 수정 후 패키징한 후 war 패키지를 게시해야 합니다.

3. CAS 서버를 tomcat에 게시

다운로드한 war 패키지를 D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps 디렉터리에 넣습니다.

 이 디렉터리에 복사한 후 war 패키지의 압축이 자동으로 풀리고 압축이 풀린 파일의 이름이 cas로 바뀌며 war 패키지가 삭제됩니다.

 bin 디렉토리로 돌아가서 setup.bat 파일을 실행하십시오.

성공적인 시작 후 https://localhost:8443/cas/login을 방문합니다. 

시동에 문제가 없다면 위의 URL에 성공적으로 접속이 된 것입니다.

 D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\classes 디렉터리를 입력하고 application.properties 파일을 엽니다.

즉, cas로 받은 사용자는 casuser, 비밀번호는 Mellon이므로 로그인 페이지에 입력하면 로그인에 성공합니다.

 입력한 사용자 이름과 비밀번호가 위의 내용과 일치하지 않을 경우 인증이 실패됩니다.

 계속해서 D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\classes 디렉터리에서 log4j2.xml 파일을 엽니다.

위 로그의 기본 경로를 D:\CAS\log로 변경합니다.

 도메인 이름 구성: C:\Windows\System32\drivers\etc\hosts

파일을 저장할 때 다음 오류가 발생합니다.

 솔루션 제공 기사 링크: http://t.csdn.cn/0pLZy

시도한 결과 성공적으로 해결되었습니다.

 도메인 이름이 성공적으로 구성되면 https://java1234.com:8443/cas를 사용하여 액세스할 수 있습니다.

4. CAS 구성 데이터 소스 및 데이터베이스 사용자 인증

위 로그인에 사용된 사용자명과 비밀번호는 application.properties 파일에 하드코딩되어 있으나, 실제 개발에서는 데이터소스 설정 및 데이터베이스 사용자 인증이 필요하다.

a. 새 데이터 및 테이블 만들기

MySQL 서비스 시작

mysql -u 루트 -p를 입력합니다.

그런 다음 비밀번호를 입력하여 mysql 쉘에 들어갑니다.

mysql 셸 인터페이스에서 다음 명령을 순서대로 실행합니다.

CREATE DATABASE db_sso;

USE db_sso;

CREATE TABLE t_cas (
  id int(11) NOT NULL AUTO_INCREMENT,
  username varchar(30) DEFAULT NULL,
  password varchar(100) DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

insert into t_cas(id,username,password) values(1,'java1234','123456');

MySQL  에서는  CREATE DATABASE  문을 사용하여 데이터베이스를 생성  할 수  있으며 구문 형식은 다음과 같습니다.

CREATE DATABASE [IF NOT EXISTS] <数据库名>
[[DEFAULT] CHARACTER SET <字符集名>] 
[[DEFAULT] COLLATE <校对规则名>];

[ ]의 내용은 선택 사항입니다. 구문은 다음과 같이 설명됩니다.

  • <데이터베이스 이름>: 생성된 데이터베이스의 이름입니다. MySQL의 데이터 저장 영역은 MySQL 데이터베이스를 디렉터리 형식으로 나타내므로 데이터베이스 이름은 운영체제의 폴더 명명 규칙을 준수해야 하며, 숫자로 시작할 수 없으며, 최대한 의미가 있어야 합니다. MySQL에서는 대소문자를 구분하지 않습니다.
  • IF NOT EXISTS: 데이터베이스를 생성하기 전에 판단하십시오. 현재 데이터베이스가 존재하지 않는 경우에만 작업을 수행할 수 있습니다. 이 옵션은 데이터베이스가 이미 존재하는 경우 중복 생성 오류를 방지하는 데 사용할 수 있습니다.
  • [DEFAULT] CHARACTER SET: 데이터베이스의 문자셋을 지정한다. 문자 집합을 지정하는 목적은 데이터베이스에 저장된 데이터가 왜곡되는 것을 방지하는 것입니다. 데이터베이스 생성 시 문자셋을 지정하지 않으면 시스템의 기본 문자셋이 사용된다.
  • [DEFAULT] COLLATE: 문자 집합에 대한 기본 대조 규칙을 지정합니다.

MySQL의 문자 집합(CHARACTER)과 대조 규칙(COLLATION)은 서로 다른 개념입니다. 문자 집합은 MySQL이 문자열을 저장하는 방식을 정의하는 데 사용되며 대조 규칙은 문자열을 비교하는 방식을 정의합니다. MySQL의 문자 집합과 대조 규칙에 대해서는 나중에 별도로 설명하겠습니다.

mysql의 ENGINE = innodb는 스토리지 엔진이 innodb임을 의미합니다. innoDB는 MySQL에서 외래 키 제약 조건을 제공하는 최초의 데이터 스토리지 엔진입니다. InnoDB는 트랜잭션 처리 기능 외에도 행 잠금도 지원하여 Oracle 과 동일한 일관된 잠금 없는 읽기 기능을 제공하여 동시 읽기 사용자 수를 늘리고 성능을 향상시킵니다. 잠금 수를 늘리지 않고도 성능을 향상할 수 있습니다. InnoDB는 대용량 데이터 처리 시 성능을 극대화하도록 설계되었으며, CPU 활용도는 다른 디스크 기반 관계형 데이터베이스 엔진 중 가장 효율적입니다.

 b. application.properties 구성 파일을 수정합니다.

D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\classes 디렉터리를 입력하고 application.properties 파일을 찾습니다.

하드 코딩된 인증 사용자를 주석 처리합니다.

플러스 jdbc 데이터 소스 구성

cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/db_sso?serverTimezone=GMT

cas.authn.jdbc.query[0].user=root

cas.authn.jdbc.query[0].password=123456

cas.authn.jdbc.query[0].sql=select * from t_cas where username=?

cas.authn.jdbc.query[0].fieldPassword=password

cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver

 c. jdbc 드라이버 패키지 및 지원 jar 추가

이전에 다운로드한 jar 패키지를 D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\lib 디렉터리에 복사합니다.

 d. 테스트

bin 디렉토리를 입력하고 start.bat를 시작하십시오.

로그인 페이지에 들어가 로그인을 해보니 인증에 실패했다고 나오네요. 데이터베이스 연결에 문제가 있을 수 있는데 어떻게 해결해야 할지 모르겠습니다.

5. CAS 클라이언트+SpringBoot 클라이언트 통합 및 구축

 참고: com.java1234 패키지는 crm_sys 모듈 아래의 java 디렉터리에 생성되어야 하며, 이는 3단계 끝에서 구성된 도메인 이름과 일치해야 합니다.

CAS는 기본적으로 https 서비스를 지원하고 http 서비스는 지원하지 않기 때문에 지금 프로젝트를 실행하고 http://localhost:9999에 접속하면 인증되지 않은 서비스 오류가 발생합니다.

이제 http 서비스를 구성하고 D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\classes\services 디렉터리를 입력한 다음 HTTPSandIMAPS를 엽니다. 10000001.json 파일에 아래와 같이 |http를 추가합니다.

그런 다음 이전 경로인 D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\classes로 돌아가서 application.properties 파일을 열고 파일 끝에 다음 코드를 추가하십시오.

cas.tgc.secure=false

cas.serviceRegistry.initFromJson=true

 그런 다음 bin 디렉토리에 들어가서 start.bat를 시작하고 http://localhost:9999를 방문하여 자동으로 로그인 페이지로 이동할 수 있는지 확인하세요.

해당 시스템 인터페이스에 들어가려면 사용자 이름과 비밀번호를 입력하십시오.

Single Sign-On을 더 잘 확인하기 위해 여러 모듈을 더 만들 수 있습니다.

 테스트 페이지 코드는 다음과 같습니다.

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="Cache-Control" content="no-cache">
    <meta http-equiv="Expires" content="0">
    <title>SSO单点登录系统 Powered by java1234.vip</title>
</head>
<body>
SSO单点登录系统 Powered by java1234.vip<br/>
<a href="http://java1234.com:6666/crm" target="_blank">crm客户关系管理系统</a><br/>
<a href="http://java1234.com:8888/fd" target="_blank">fd财务管理系统系统</a><br/>
<a href="http://java1234.com:9999/hr" target="_blank">hr人力资源管理系统</a><br/>
</body>

테스트 페이지는 그림과 같습니다.

테스트 결과 싱글 로그인과 로그아웃은 정상입니다.

로그인하지 않은 상태에서 임의의 시스템에 들어가기 위해 클릭하면 로그인 확인을 위한 cas 싱글 사인온 인터페이스로 이동합니다. 성공 후에는 다른 시스템에 들어가기 위해 확인이 필요하지 않습니다. 로그아웃하면 다른 시스템도 동시에 로그아웃됩니다.

 6. CAS 서버 인터페이스 수정

D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\classes 디렉터리를 입력하고,layout.html 파일을 열고, 헤더를 주석 처리합니다. 그리고 바닥글.

 그런 다음 bin 디렉토리에 있는 setup.bat 파일을 다시 시작하면 실행 효과는 그림과 같으며 머리글과 바닥글이 삭제되었습니다.

그런 다음 그림과 같이 casLoginView.html 파일의 해당 부분에 주석을 추가합니다.

 실행 결과는 다음과 같습니다.

 D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\classes\static\css\cas.css 파일에 다음 코드를 추가합니다.

#notices .rightimg{
  width: 500px;
  height: 440px;
  background-image: url(D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\classes\static\images\login-img.png);
}

casLoginView.html 파일 아이콘에 다음 코드 줄을 추가합니다.

Startup.bat 시작의 실행 효과는 그림과 같습니다.

 

추천

출처blog.csdn.net/weixin_54106682/article/details/131231339