SpringMVC + Shiro重定向次数过多问题

企业级系统,内部服务数较多,单点登录简称(SSO)是系统不断增多必须要面临的一个问题.

SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

今天在弄单点登录,用的是CAS。权限控制使用的是shiro,shiro有个shiro-cas子模块可以与CAS进行集成。

CAS原理

SpringMVC + Shiro重定向次数过多问题
image.png
  • CAS服务端:主要用于对CAS客户端进行认证和授权,实现方式为发放和验证ticket来实现。
  • CAS客户端:一般是可以通过支持的协议(例如,CAS,SAML,OAuth)与服务端进行通信的客户端,可以是某些软件包,也可以是具体的应用。在企业系统中一般为一个个的服务。

具体可参考官网

具体错误

说一下今天遇到的具体问题,感觉自己脑袋反应不灵活啊,我用的Spring Boot集成Shiro与CAS,在配置Shiro相关的Bean的时候。
因为要自定义一些过滤器,ShiroFilter中可以设置自己的Filter,当设置自己的Filter的时候,默认的Filter会被覆盖掉。

我自定义的Filter都配置成了Spring的Bean,并且把Shiro的LogoutFilter也配置成了Bean
Spring Boot默认加载所有的Filter Bean并且在请求的时候都会生效,这样就导致每次请求LogoutFilter都会生效,然后每次的登录信息都被清除,清除登录信息之后,其它的认证相关Filter也继续起作用,并且执行登录方法,登录失败重定向到登录页面,登录页面也会调用LogoutFilter,总之就是一直重定向了。

知识点

今天的错误就是对Spring的知识点理解不够透彻导致的,Spring中配置的所有Filter Bean默认都会生效。

最后

一个小问题,把自己的问题记录下来,省的以后别人问自己遇到过什么问题吗?然后自己连个问题都说不出来。

参考