文档章节

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

Assassin1991
 Assassin1991
发布于 2016/08/27 11:57
字数 698
阅读 524
收藏 0

本人新手一枚,刚毕业不久,因最近研究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之后无法匹配返回路径,才造成无限循环,至此问题解决。

© 著作权归作者所有

共有 人打赏支持
Assassin1991
粉丝 0
博文 2
码字总数 1059
作品 0
杭州
私信 提问
Spring Boot 集成Shiro和CAS

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/catoop/article/details/50534006 请大家在看本文之前,先了解如下知识点: 1、Shiro 是什么?怎么用? 2、C...

单红宇
2016/01/17
0
0
在 Web 项目中应用 Apache Shiro 开源权限框架

Apache Shiro 是功能强大并且容易集成的开源权限框架,它能够完成认证、授权、加密、会话管理等功能。认证和授权为权限控制的核心,简单来说,“认证”就是证明你是谁? Web 应用程序一般做法...

IBMdW
2013/02/05
20.7K
38
在 Web 项目中应用 Apache Shiro

用户权限模型 在揭开 Shiro 面纱之前,我们需要认知用户权限模型。本文所提到用户权限模型,指的是用来表达用户信息及用户权限信息的数据模型。即能证明“你是谁?”、“你能访问多少受保护资...

BenettX
2013/08/28
0
0
在 Web 项目中应用 Apache Shiro

用户权限模型 在揭开 Shiro 面纱之前,我们需要认知用户权限模型。本文所提到用户权限模型,指的是用来表达用户信息及用户权限信息的数据模型。即能证明“你是谁?”、“你能访问多少受保护资...

heroShane
2014/02/09
0
3
Spring Shiro CAS 客户端集成配置

如果不熟悉Shiro 和CAS的概念,可以在网上搜索一下这方面的资料, 在配置CAS客户端配置之前,首先要进行CAS服务端配置 配置之前需要引入一些jar包具体如下: (一)cas登录 web.xml配置 shir...

zbbmaster
2017/05/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

安装数据库 常见问题

数据库重置密码 如果MySQL数据库用户的密码设置过于简单,数据库在用户登录后会提示重置密码,并且不接受简单的密码。 提示需要重置密码: ERROR 1820 (HY000): You must reset your passwo...

狼王黄师傅
12分钟前
0
0
三种方式拿到反射的入口

public class a_1 { public static void main(String args[]) throws ClassNotFoundException { //三种方式拿到反射的入口 System.out.println(Class.forName("reflect.com.Son")); System.o......

南桥北木
24分钟前
1
0
Macbook 安装PhotoShop 总提示安装包损坏的问题

问题描述 今天在给Mac10.12安装Adobe Photoshop的时候一直提示Error The installation cannot continue as the installer file may be damaged. Download the installer file again.起初以为......

Carlyle_Lee
30分钟前
1
0
Java 帝国对 Python 的渗透能成功吗?哈哈

引子 Java 帝国已经成立20多年,经过历代国王的励精图治,可以说是地大物博,码农众多。 可是国王依然不满足,整天想着如何继续开拓疆土, 这一天晚上他又把几个重臣招来商议了。 IO大臣说:...

边鹏_尛爺鑫
今天
13
0
分布式事务解决方案框架(LCN)

什么是XA接口 XA是一个分布式事务协议,由Tuxedo提出。XA中大致分为两部分:事务管理器和本地资源管理器。其中本地资源管理器往往由数据库实现,比如Oracle、DB2这些商业数据库都实现了XA接口...

群星纪元
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部