我是靠谱客的博主 懵懂导师,最近开发中收集的这篇文章主要介绍SpringBoot+Cas+Shiro+JWT问题总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

#单点登录 #cas 跨域名 单点登出       #cas使用教程

Springboot后台使用  pac4j 4.0

配置Cas+Shiro之后碰见CasRealm里的验证方法不识别 JwtToken

 protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken)

在CasRealm里重写supports

    /**
     * 重点:注意,这里必须判断,cas登录时,token类型为AuthenticationToken
     *
     * @param token
     * @return
     */
    @Override
    public boolean supports(AuthenticationToken token) {
        if (token instanceof JwtToken) {
            return token instanceof JwtToken;
        }
        return token instanceof AuthenticationToken;
    }

Cas跨顶级域名单点登出失效问题

Client1 www.aaa.com

Client2 www.bbb.com

登出 Client1 ,  Client2 刷新后不会登出。

网上找了一大堆资料,全部无用,暂时只能是用Nginx转发或二级域名去配置,等找到更好的解决方法再更新。

2021年12月21日09:47:46 更新

SpringBoot添加Filter

    @Bean
    public ServletListenerRegistrationBean<SingleSignOutHttpSessionListener> singleSignOutHttpSessionListener() {
        ServletListenerRegistrationBean<SingleSignOutHttpSessionListener> listener = new ServletListenerRegistrationBean<SingleSignOutHttpSessionListener>();
        listener.setEnabled(true);
        listener.setListener(new SingleSignOutHttpSessionListener());
        listener.setOrder(1);
        return listener;
    }

    /**
     * 该过滤器用于实现单点登出功能,单点退出配置,一定要放在其他filter之前
     *
     * @return
     */
    @Bean
    public FilterRegistrationBean singleSignOutFilter() {
        FilterRegistrationBean filterRegistration = new FilterRegistrationBean();
        filterRegistration.setFilter(new SingleSignOutFilter());
        filterRegistration.setEnabled(true);
        filterRegistration.addUrlPatterns("/*");
        filterRegistration.addInitParameter("casServerUrlPrefix", casServerUrl);//Cas的地址
        filterRegistration.addInitParameter("serverName", projectUrl);//当前项目的地址
        filterRegistration.setOrder(1);
        return filterRegistration;
    }

然后直接调用 casServerUrl + "/logout"

他会向通知每个客户端,可以启动两个项目hosts配置

127.0.0.1 www.cas1.com

127.0.0.1 www.cas2.com

并在SingleSignOutHttpSessionListener()的 sessionDestroyed方法下打断点

在网址输入 casServerUrl + "/logout" 回车,查看两个项目是否都进入 sessionDestroyed 方法。

如无法进入请检查网络。

我的环境:

Cas-Overlay-template 5.3.14  使用了redis存储ticket

Cas Server引入

        <dependency>
            <groupId>org.apereo.cas</groupId>
            <artifactId>cas-server-support-redis-ticket-registry</artifactId>
            <version>${cas.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apereo.cas</groupId>
            <artifactId>cas-server-support-redis-service-registry</artifactId>
            <version>${cas.version}</version>
        </dependency>

application.properties 添加设置

#是否移除子系统的票据
cas.logout.removeDescendantTickets=true
cas.slo.asynchronous=true
#Redis
cas.ticket.registry.redis.host=192.168.1.100
cas.ticket.registry.redis.database=0
cas.ticket.registry.redis.port=6379
cas.ticket.registry.redis.password=
cas.ticket.registry.redis.timeout=20000
cas.ticket.registry.redis.useSsl=false
cas.ticket.registry.redis.usePool=false
cas.ticket.registry.redis.pool.max-active=20
cas.ticket.registry.redis.pool.maxIdle=8
cas.ticket.registry.redis.pool.minIdle=0
cas.ticket.registry.redis.pool.maxActive=8
cas.ticket.registry.redis.pool.maxWait=-1

 亲测有效。

最后

以上就是懵懂导师为你收集整理的SpringBoot+Cas+Shiro+JWT问题总结的全部内容,希望文章能够帮你解决SpringBoot+Cas+Shiro+JWT问题总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部