shiro+cas 非https重复登录,cas使用自定义SessionManager循环跳转问题

重复登录

  • cas配置了非https访问之后,登录了,可以访问一次子服务但是不可以访问其他的子服务,这是因为浏览器和cas服务端的cookie凭证TGC是https的,访问其他的子服务浏览器会重定向到cas获取一个凭证,这时候不会携带这个TGCcookie,浏览器对于cas服务器来说是没有登录的解决方法是设置cas服务器的cookie生成器为非https的如图webapps\cas\WEB-INF\springconfiguration\ticketGrantingTicketCookieGenerator.xml,这个配置对于4.1.0以下版本cas有用,但是对于以上的不知道配置文件在哪儿,如果知道可以告诉我
<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
          c:casCookieValueManager-ref="cookieValueManager"
          p:cookieSecure="false"
          p:cookieMaxAge="-1"
          p:cookieName="TGC"
          p:cookiePath="/cas"/>

循环跳转

  • cas使用自定义的SessionManager,在cas登录成功之后,从cas获取ticket,shiro校验放行跳转到目标页面然后又要重新登录,跳转到cas获取凭证shiro再次校验这样重复跳转。
  • tomcat接收到请求,执行过滤器链ApplicationFilterChain,这时候Spring代理的ShiroFilter,shiroFilter本身,和配置的casFilter都在这个链之上,所以casFilter执行了两次,第一次在shiroFilter内部filterChain,这个时候标记shiro本身的session登录成功,第二次在ApplicationFilterChain执行这个时候标记一个新创建的httpSession登录成功。如果这两个session对应的cookie名称相同那么httpSession的cookie会覆盖ShiroSession的cookie.但是shiro拿httpSession的id去找自身的session就找不到了所以请求需要重新登录。然后就出现循环跳转。解决方法sessionManage设置cookie名称与tomcat的默认cookie名称(JSESSONID)不同
@Bean
public SessionManager sessionManager(){
    DefaultWebSessionManager dwsm = new DefaultWebSessionManager();
    dwsm.setSessionDAO(redisSessionDAO());
    SimpleCookie simpleCookie = new SimpleCookie();
    simpleCookie.setName("xxxxx");
    simpleCookie.setPath("/");
    dwsm.setSessionIdCookie(simpleCookie);
    return dwsm;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值