JeecgBoot集成CAS单点登录

一: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放行

 最后重启项目就可以了

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值