一:CAS服务器基础部署配置
第一步:下载官方提供的CAS部署工程和对应版本Tomcat(建议使用8.0以上版本)。解压后的CAS工程目录列表如下
https://github.com/apereo/cas-overlay-template
第二步:双击build.sh运行程序,会自动开始构建war包,构建完成后会在同级目录出现target文件夹,进入文件夹目录如下
第三步:将cas.war包拷贝到tomcat目录/webapps/目录下,启动tomcat,cas.war将会被自动解压。出现下图所示,表示启动成功。
第四步:浏览器输入地址:https://localhost:8443/cas/login,会弹出登录界面。
第五步:输入初始用户名和密码:casuser/Mellon,登录成功,表示基础部署完成
二:配置HTTPS
采用JDK自带的keytool工具生成秘钥库
别名 java1234 存储路径 D:\cas\keystore
keytool -genkey -v -alias java1234 -keyalg RSA -keystore D:\cas\keystore\java1234.keystore
这里需要填写一些信息,注意填写要域名;
秘钥库密码我们用 666666
执行完,会生成一个秘钥库文件;
1.从密钥库导出证书
DOS命令:
keytool -export -trustcacerts -alias java1234 -file D:/cas/keystore/java1234.cer -keystore D:/cas/keystore/java1234.keystore
输入第一步的密码即可生成证书:
2.将证书导入到JDK证书库
DOS命令:
keytool -import -trustcacerts -alias java1234 -file D:/cas/keystore/java1234.cer -keystore "E:/jdk1.8/jre/lib/security/cacerts"
密码口令:changeit
3.Tomcat配置https支持
采用tomcat9
找到tomcat->conf->server.xml 打开文件
加下如下配置即可;
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="D:\cas\keystore\java1234.keystore"
keystorePass="666666" />
启动bin下的startup.bat
(默认有中文乱码,可以我们来到tomcat目录的conf子目录中,找到一个名为 "logging.properties" 的文件,打开这个文本文件,找到如下配置项:
java.util.logging.ConsoleHandler.encoding = UTF-8
将 UTF-8 修改为 GBK,修改后的效果为:
java.util.logging.ConsoleHandler.encoding = GBK
保存后,重启tomcat!)
4.日志文件配置
5.配置host文件域名
修改内容:127.0.0.1 java1234.com
通过域名访问:
https://java1234.com:8443/cas/login
用户名:casuser 密码:Mellon
三:集成JeecgBoot
1:cas服务器端添加REST认证依赖
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-rest-authentication</artifactId>
<version>${cas.version}</version>
</dependency>
2.配置application.properties文件
cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true
#后端验证CAS登录用的接口
cas.authn.rest.uri=http://localhost:8080/fcsp/sso/user/login
#关闭CAS加密
cas.authn.rest.passwordEncoder.type=NONE
cas.authn.rest.passwordEncoder.characterEncoding=UTF-8
cas.authn.rest.passwordEncoder.encodingAlgorithm=MD5
三:JeecgBoot前端配置
注:前端配置参考官方文档就行,新一点的版本默认都是配置好了,只需要配置好单点登录对接的地址然后开启就行
四:JeecgBoot后端配置
1:配置好单点登录地址
2:实现登录接口验证(这里放在项目中了,也可以单独部署一个)
注:这里就是 cas.authn.rest.uri=http://localhost:8080/fcsp/sso/user/login 的验证
package org.jeecg.modules.sso.controller;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.jeecg.common.util.PasswordUtil;
import org.jeecg.modules.sso.domain.SysUser;
import org.jeecg.modules.sso.mapper.SysSsoUserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.Base64Utils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("/sso/user")
public class SysSsoUserController {
private Logger logger = LogManager.getLogger(SysSsoUserController.class);
@Autowired
private SysSsoUserMapper sysUserMapper;
@PostMapping("/login")
public Object login(@RequestHeader HttpHeaders httpHeaders) {
logger.info("Rest api login.");
logger.debug("request headers: " + httpHeaders);
SysUser user = null;
try {
UserTemp userTemp = obtainUserFormHeader(httpHeaders);
//当没有 传递 参数的情况
if(userTemp == null){
return new ResponseEntity<SysUser>(HttpStatus.NOT_FOUND);
}
//尝试查找用户库是否存在
user = sysUserMapper.getSysUser(userTemp.username);
//2. 校验用户名或密码是否正确
String userpassword = PasswordUtil.encrypt(userTemp.username, userTemp.password, user.getSalt());
if (user != null) {
if (!userpassword.equals(user.getPassword())) {
//密码不匹配
return new ResponseEntity(HttpStatus.BAD_REQUEST);
}
if ("2".equals(user.getStatus())) {
//禁用 403
return new ResponseEntity(HttpStatus.FORBIDDEN);
}
if (user.isLocked()) {
//锁定 423
return new ResponseEntity(HttpStatus.LOCKED);
}
if (user.isExpired()) {
//过期 428
return new ResponseEntity(HttpStatus.PRECONDITION_REQUIRED);
}
} else {
//不存在 404
return new ResponseEntity(HttpStatus.NOT_FOUND);
}
} catch (UnsupportedEncodingException e) {
logger.error("", e);
new ResponseEntity(HttpStatus.BAD_REQUEST);
}
logger.info("[{" + user.getUsername() + "}] login is ok");
//成功返回json
Map<String, Object> attributes=new HashMap<>();
attributes.put("username",user.getUsername());
user.setAttributes(attributes);
return user;
}
}
认证完整代码:Jeecg配置单点登录登录验证完整代码-Java文档类资源-CSDN下载
shiro放行
最后重启项目就可以了