springboot+cas5.x+shiro+pac4j实现sso集成(一)

先说下项目背景,公司的项目原来用的kisso+shiro,但是kisso太小众了,性能各方面也不满足要求,所以老大要更换springboot+cas+shiro+pac4j集成,楼主在资料极少的情况下弄了很久还是没配置好shiro+pac4j,项目老大奋斗到深夜给解决了,所以写一篇博客造福小白了!

首先下载cas,下载5以上的版本 https://github.com/apereo/cas-overlay-template

 

编译

解压zip,命令行进去,执行mvn clean package 
结束之后会出现 target 文件夹,里面有war包啥的,把war包解压,比如我们把解压后的文件夹命名为 cas_war 吧,后文提到 cas_war 就代表是这个文件夹

本地配置tomcat通过https访问

注意以下所有命令除了文件路径最好都跟我的保持一致,比如alias,就用tomcat不要换别的,省的小白出问题 
命令行里cd进入%JAVA_HOME%/bin目录,配置了环境变量就不用了

1.执行:

keytool -genkeypair -alias "tomcat" -keyalg "RSA" -keystore "E:\projects\hugeo\cas\tomcat.keystore" 
按照以下输入:

密钥库口令:123456(这个密码非常重要)
名字与姓氏:www.hugeo.com(域名很重要,建议自己编个域名,在host文件里写好映射,host的使用百度吧)
组织单位名称:anything(随便填)
组织名称:anything(随便填)
城市:anything(随便填)
省市自治区:anything(随便填)
国家地区代码:anything(随便填)

现在E:\projects\hugeo\cas\tomcat.keystore这个文件生成了

2.继续执行:

keytool -export -file E:\projects\hugeo\cas\cas.crt -keystore E:\projects\hugeo\cas\tomcat.keystore -alias tomcat 
用刚刚的tomcat.keystore文件生成了cas.crt文件

3.导入授权文件到jdk并设置密码:

keytool -import -file E:\projects\hugeo\cas\cas.crt -alias tomcat -keystore E:\programFiles\Java\jre1.8.0_131\lib\security\cacerts -storepass 123456 
注意-storepass 123456是设置此步骤的密码的,第一次执行命令设置之后以后再执行这个命令就不要带这个参数了,然后输入密码的时候输第一次设置的密码,这个密码和生成keystore的密码可以不一样,设置成一样的比较方便防止搞混

要删除也很容易: 
keytool -delete -alias tomcat -keystore E:\programFiles\Java\jre1.8.0_131\lib\security\cacerts

(如果导入的时候没有设置别名就再导入一次,会显示别名)

5.修改tomcat的配置文件server.xml

删掉:

添加:

6.把crt文件导入浏览器,我用的是chrome

springboot+cas5.x+shiro+pac4j实现sso集成(一)_第1张图片
springboot+cas5.x+shiro+pac4j实现sso集成(一)_第2张图片
把第二步生成的crt文件导进去进行了

7. 检查配置

把 cas_war 放到tomcat的webapp下面改名为cas,启动tomcat,浏览器访问https://www.hugeo.com:8443/cas/login,如果提示签名不正确之类的就点击高级/详细信息,继续访问。

8.注意

大部分情况下本地开发是不需要ssl访问的,所以建议给cas单独弄个tomcat,反正一个tomcat也就十几兆,我本地开发其他项目时用tomcat8,cas使用的是tomcat9,版本其实也没太大关系,好像是高于tomcat8的版本就可以了

建项目

用idea新建一个spring boot项目,什么插件都不需要 
pom.xml是从第一步下载的zip里的pom文件改造的,最好大概看一下理解一下,需要修改的地方自己改:



    4.0.0

    com.hugeo
    cas
    0.0.1-SNAPSHOT
    war

    cas
    Demo project for Spring Boot

    
        UTF-8
        UTF-8
        1.8

        5.2.3
        -tomcat

        org.springframework.boot.loader.WarLauncher
        false
        
            ${project.build.directory}/war/work/org.apereo.cas/cas-server-webapp${app.server}/META-INF/MANIFEST.MF
        

        1.8
        1.8
        2.0.0.RELEASE
    

    
        
            sonatype-releases
            http://oss.sonatype.org/content/repositories/releases/
            
                false
            
            
                true
            
        
        
            sonatype-snapshots
            https://oss.sonatype.org/content/repositories/snapshots/
            
                true
            
            
                false
            
        
        
            shibboleth-releases
            https://build.shibboleth.net/nexus/content/repositories/releases
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                ${springboot.version}
                
                    ${mainClassName}
                    true
                    ${isExecutable}
                    WAR
                
                
                    
                        
                            repackage
                        
                    
                
            
            
                org.apache.maven.plugins
                maven-war-plugin
                2.6
                
                    cas
                    false
                    false
                    
                        false
                        ${manifestFileToUse}
                    
                    
                        
                            org.apereo.cas
                            cas-server-webapp${app.server}
                        
                    
                
            
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.3
            
        
        cas
    

    
        
        
            org.apereo.cas
            cas-server-webapp${app.server}
            ${cas.version}
            war
            runtime
        
        
        
            mysql
            mysql-connector-java
            5.1.44
        
    


  •  

搞了很久的还有一个原因是以前没有接触过maven的overlay用法,这个功能就是引入一个war包(不知道jar包可不可以,没试),然后打包的时候,框架会在这个war包的基础上把自己写的类啊,配置文件啊什么加进去,如果原来已经有了就覆盖,了解这个之后就觉得这个用法挺好的,保持了项目的简洁性,实现无侵入性改造。 
我理解的这两个地方是配合使用的: 
springboot+cas5.x+shiro+pac4j实现sso集成(一)_第3张图片

dependency的war包用于覆盖,overlay用于配置哪些文件不打包到最终war包里,类似这种用法: 
springboot+cas5.x+shiro+pac4j实现sso集成(一)_第4张图片 
不过我也没试过,猜测的

这样虽然可以打包了,但是依赖的war包里的类并不能编译,想写一个类继承war包里的一个类搞不定,引用不到,scope改成compile也是一样,有博客提到用下面这种糟糕的方式:

  
    org.apereo.cas
    cas-server-webapp${app.server}  
    ${cas.version}  
    jar
    classes
    provided
  

相当于是把war包里需要的jar都下载下来的意思,下载了半年都没下好,很浪费时间空间,因为需要的jar包在咱们的 css_war/WEB_INF/lib 下面都有了啊,所以就不搞这些虚的了,直接在 Project Structure->Modules->Dependencies把 css_war/WEB_INF/lib 引入进来,scope选provided。

==================================图解分割线=================================================

如果你用的idea这几个一起按(Ctrl+Shift+Alt+S)会出现这么一个图   如果是elps是那个小瓶子,自己解决

springboot+cas5.x+shiro+pac4j实现sso集成(一)_第5张图片

webapp目录需要自己创建,如果不用在里面加什么自定义文件的话不创建也可以 
目前为止项目结构: 
springboot+cas5.x+shiro+pac4j实现sso集成(一)_第6张图片

application.properties和META-INF文件夹从 css_war 里面拷贝出来,后面自己定制化会涉及到修改这两个文件

配置调试注意: 
1. tomcat选择配置了ssl的那个 
2. url自己写一下,跟下面的https端口一样 
3. jdk至少1.8 
4. http port不要填,否则启动会报错 
5. contextpath配置一下 
springboot+cas5.x+shiro+pac4j实现sso集成(一)_第7张图片
springboot+cas5.x+shiro+pac4j实现sso集成(一)_第8张图片
第一次启动应该会出现: 
springboot+cas5.x+shiro+pac4j实现sso集成(一)_第9张图片 
选accept就行了

大功告成了 
springboot+cas5.x+shiro+pac4j实现sso集成(一)_第10张图片

 

用户名casuser,密码Mellon。 

后面会集成 自定义数据库认证

shiro+pac4j的集成,权限管理


因为我主要讲解的是shiro+pac4j,前面的基础借鉴https://blog.csdn.net/u010588262/article/details/79741626 这个博客

你可能感兴趣的:(cas)