关于spring集成shiro集成CAS的单点登录成功后重定向循环问题的解决办法

本人新手一枚,刚毕业不久,因最近研究shiro与cas单点登录问题,遇上了cas服务器成功登陆后返回到client出现的各种状况表示不胜其烦。

    博主一开始参考开涛的shiro集成cas,收获颇丰,然后自己写一个单点登录Demo,其中遇上了不少的问题让博主很少苦恼,

首先的web.xml配置过滤器

楼主一开始配置了3个过滤器,是为了获得登录成功后client获得server登录时的用户参数

  <!-- CAS服务器拦截器  该过滤器负责用户的认证工作,必须启用它 -->
  <filter>
      <filter-name>CASFilter</filter-name>
      <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
      <init-param>
          <param-name>casServerLoginUrl</param-name>
          <param-value>https://localhost:8443/cas/login</param-value>
      </init-param>
      <init-param>
          <param-name>serverName</param-name>
          <param-value>http://localhost:8080</param-value>
      </init-param>
  </filter>
  <filter-mapping>
      <filter-name>CASFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>

 <!-- 在Ticket的校验工作前获取ticket -->
<!--   <filter>
      <filter-name>GetTicket</filter-name>
      <filter-class>com.vacomall.filter.GetTicket</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>GetTicket</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping> -->

  <!-- 该过滤器负责对Ticket的校验工作,必须启用它 -->
<!--   <filter>
      <filter-name>CAS Validation Filter</filter-name>
      <filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
      <init-param>
          <param-name>casServerUrlPrefix</param-name>
           下面的URL是Cas服务器的认证地址
          <param-value>https://localhost:8443/cas</param-value>
      </init-param>
      <init-param>
          <param-name>serverName</param-name>
          下面的URL是具体某一个应用的访问地址
          <param-value>http://localhost:8080</param-value>
      </init-param>
  </filter>
  <filter-mapping>
      <filter-name>CAS Validation Filter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>  -->

  <!--  
    该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。  
    比如AssertionHolder.getAssertion().getPrincipal().getName()。  
    -->

<!--   <filter>  
       <filter-name>CAS Assertion Thread Local Filter</filter-name>  
       <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>  
   </filter>  
   <filter-mapping>  
       <filter-name>CAS Assertion Thread Local Filter</filter-name>  
       <url-pattern>/*</url-pattern>  
   </filter-mapping>
  自动根据单点登录的结果设置本系统的用户信息(具体某一个应用实现)
  <filter>
      <filter-name>CasForInvokeContextFilter</filter-name>
      <filter-class>com.vacomall.filter.CasForInvokeContextFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>CasForInvokeContextFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping> -->

但是经过Cas20ProxyReceivingTicketValidationFilter过滤器之后,不管代码如何修改,cas返回成功后的地址会经过2次重定向,以致于到

  <!-- cas过滤器 -->
        <bean id="casFilter" class="com.vacomall.filter.MyCasFilter">
            <!-- 配置验证错误时的失败页面  -->
            <property name="failureUrl" value="/casFailure.jsp"/>
            <property name="successUrl" value="/index"></property>
        </bean>

后cas过滤器无法获取到ticket,如下贴图

把上面3个过滤器注释掉之后,url只经过一次重定向,并带着ticket返回

之后的问题就是返回失败进入失败页面,进入cas服务端验证再返回无限循环

查看源代码之后,发现ticketValidator.validate(ticket, getCasService())抛出了异常,

ticket值与浏览器的值一致,没有错误,那问题就出在了 getCasService()这个上面,

casService经过配置文件查看,才发现<property name="casService" value="https://localhost:8080/spring_mybatis/index"></property>

返回路径错误,因自己多加了s,变成https之后无法匹配返回路径,才造成无限循环,至此问题解决。

转载于:https://my.oschina.net/assassin1991/blog/738654

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单点登录(Single Sign-On,简称SSO)是一种身份验证和授权机制,允许用户使用一组凭据登录到多个应用程序和系统,而不需要在每个应用程序单独输入用户名和密码。 Shiro是一个开源的Java安全框架,提供身份验证、授权、加密、会话管理等功能。Spring Security OAuth 2.0是Spring Security的一个扩展,用于实现OAuth 2.0协议,提供基于令牌的身份验证和授权。 集成ShiroSpring Security OAuth 2.0可以实现单点登录功能。首先,需要配置一个认证心作为身份提供者,其他应用程序和系统将依赖该认证心进行身份验证和用户信息获取。在集成过程,需要在认证心和其他应用程序配置Shiro的过滤器链,并将相关的OAuth 2.0配置添加到Spring Security的配置。 当用户在一个应用程序登录时,该应用程序将重定向至认证心,用户在认证心完成身份验证后,会生成一个访问令牌(Access Token)。该访问令牌可以在其他应用程序之间传递,并由Shiro验证器进行验证。在其他应用程序,用户使用访问令牌向认证心进行验证,通过后就可以无需重新输入用户名和密码,直接访问其他应用程序。 集成ShiroSpring Security OAuth 2.0实现单点登录的好处是可以减少用户登录的次数,提高用户体验,同时也可以提高系统的安全性,减少密码泄露的风险。这样的集成方案可以适用于多个系统和应用程序之间的跨域身份验证和授权需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值