然后经过CAS认证后跻身应用程式1,未有配备退出

2019-10-06 01:54 来源:未知

在行使SpringSecurity时遭逢二个匪夷所思的难题,正是:

出处:

正文分两片段

当客商积极点击退出按键后,跳转到登陆界面,这一年实行登入操作。即使登陆成功,却照旧停留在的报到分界面(其实早就报到成功,固然手动修改U福睿斯L地址可以符合规律步入到必要登陆技艺步向的分界面),并且浏览器地址前边增添了?logout,看起来是那般的:

自打CAS 3.4就很好的援助了单点注销功用,配置也非常粗大略。

1.转外人的稿子,详细介绍了跨站单点登入的规律和解决方案

详见再一次查看了SpringSecurity文书档案发掘:SpringSecurity 4 默许退出地址为/logout,並且辅助以下配置:

事先版本因为在CAS服务器通过HttpClient发送新闻时并未有一点点名称为POST情势,所以在CAS客商端的吊销Filter中平素不收受POST央浼(要知道Filter只对Post乞求起效果),也就从未有过做session销毁管理。

2.自个儿要好写代码,珍视介绍当中的主要部分

  • invalidate-session 表示是还是不是要在脱离登入后让日前 session 失效,默以为 true。
  • delete-cookies 钦赐退出登陆后须要删除的 cookie 名称,几个 cookie 之间以逗号分隔。
  • logout-success-url 钦定成功脱离登陆后要重定向的 U福特ExplorerL。要求在意的是相应的 UCR-VL 应当是没有须要报到就可以访谈的。
  • success-handler-ref 内定用来管理成功退出登入的 LogoutSuccessHandler 的援用。

www.129028.com, 

1:

由于自个儿在类型中并未有配备退出登入后重定向的U奥迪Q5L,但SpringSecurity协助登入成功跳回到退出在此以前的分界面的逻辑,这就导致了再次点击登入后,登陆成功再一次跳回到了“退出地址分界面”,而并不曾真正的退出。退出分界面实际是海市蜃楼的,就是登入分界面。

三个事情系统应用软件1和APP2

假诺大家须要在以下那些站之间达成单点登入

要缓慢解决那些难点,我们只供给加一下陈设就能够:

在未曾陈设单点退出时,效果是那样子的

www.onmpw1.com

.and().logoutSuccessUrl

1:登入应用软件1,然后通过CAS认证后步入APP1,再访谈应用软件2不必要要证实

www.onmpw2.com

2:在APP第11中学年花甲之年是到cas的logout地址,现象注销成功分界面,然后再访问APP1,还是能步入的,因为APP1将客商的记名票据存入了session。

www.onmpw3.com

 

对于这种气象,大家有二种完毕方式,个中大家先来介绍实现相比轻松的不二秘诀。

那么达成了单点退出后的效应应该是那样子的:

方式一

1:登入应用软件1,然后通过CAS认证后跻身应用软件1,再访问应用软件2没有必要要表达

为了贯彻单点登入,当客商登陆当中的任何二个站点时,大家须求针对别的各个站点在浏览器端设置cookie音信。

2:顾客在APP1或然APP2点击注销,展现CAS的吊销成功页面,然后再访谈APP1恐怕应用程式2都急需重新证实。

假使客户在onmpw1站点进行登陆,登入成功授权今后,浏览器将会蕴藏一份儿onmpw1站点的cookie音讯。同期,为了能够登入onmpw2和onmpw3,大家需求在安装onmpw1的cookie的同事也对onmpw2和onmpw3实行cookie设置。因而在对onmpw1进行响应以前,我们须求先跳转到onmpw2和onmpw3站点去设置cookie信息。

 

www.129028.com 1

现实配置为,在应用软件1和APP2的web.xml文件中加进:

下图是对于七个站点的单点登陆模型(四个的雕塑起来比较劳顿,为了节省时间,就用五个来代表,不过原理是一致的)

<listener>    
        <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>    
</listener>    

 <filter>    
       <filter-name>CAS Single Sign Out Filter</filter-name>    
       <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>    
  </filter>    
<filter-mapping>    
    <filter-name>CAS Single Sign Out Filter</filter-name>    
    <url-pattern>/*</url-pattern>    
 </filter-mapping>    

www.129028.com 2

 

此种情形的表明步骤是那样的:

 

一、客户向www.onmpw1.com(以下简称onmpw1)诉求三个内需注解的页面。

裁撤的Filter要在另外Filter在此以前,分界面的裁撤连接到CAS的logout地址,如

[状态: 浏览器还尚无认证的cookie消息]

 

二、浏览器向onmpw1发送央浼(该央浼未有cookie音讯,因为它还从未存款和储蓄所属域为onmpw1.com的cookie消息)。

SingleSignOutFilter,首假诺在有ticket参数的时候,将session放到sessionMappingStorage,要是参数中存在logoutRequest,则撤废session,那什么样时候去注销sessionMappingStorage的事物吗?那是靠SingleSignOutHttpSessionListener来完结的,当有session被销毁的时候,触发将sessionMappingStorage中对应sessionid中的数据删除。

[情状: 浏览器还不曾表明的cookie音信]

为此在布置单点登出的时候,一定要安插这么些监听器,不然客商端很轻松变成内部存款和储蓄器溢出的。让我们先来走访SingleSignOutFilter的完全逻辑。

三、onmpw1开掘在伏乞中一贯不带cookie新闻,所以它将呼吁重定向到登录页面

www.129028.com 3

[境况: 浏览器还未有注解的cookie新闻]

那就是说这一个是在哪些时候会触发呢,这么些是在你登入的随便顾客端,调用https://localhost:8080/logout,那一个获得cookie里面包车型地铁TGT数据,找到TGT中关系的保有ST对应的地点(即多少个cas client),向各类地方形式一个http需要,并传递logoutRequest参数。

四、顾客提交了登陆所需验证的新闻而且点击登入开关,浏览器发送三个post乞求到onmpw1。

来看看源代码是怎么落到实处的:

[情景: 浏览器还一直不认证的cookie信息]

public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain filterChain) throws IOException, ServletException {    
      // 转换参数    
    final HttpServletRequest request = (HttpServletRequest) servletRequest;    
    //判断参数中是否具有artifactParameterName属性指定的参数名称,默认是ticket    
      if (handler.isTokenRequest(request)) {    
        // 如果存在,在本地sessionMappingStorage中记录session。    
          handler.recordSession(request);     
      } else if (handler.isLogoutRequest(request)) {//判断是否具有logoutParameterName参数指定的参数,默认参数名称为logoutRequest    
        // 如果存在,则在sessionMappingStorage中删除记录,并注销session。    
        handler.destroySession(request);    
          // 注销session后,立刻停止执行后面的过滤器    
          return;    
      } else {    
          log.trace("Ignoring URI " + request.getRequestURI());    
      }    
      //条件都不满足,继续执行下面的过滤器    
      filterChain.doFilter(servletRequest, servletResponse);    
  }    

    protected ModelAndView handleRequestInternal(
        final HttpServletRequest request, final HttpServletResponse response)
        throws Exception {
        final String ticketGrantingTicketId = this.ticketGrantingTicketCookieGenerator.retrieveCookieValue(request);
        final String service = request.getParameter("service");

        if (ticketGrantingTicketId != null) {
            this.centralAuthenticationService
                .destroyTicketGrantingTicket(ticketGrantingTicketId);

            this.ticketGrantingTicketCookieGenerator.removeCookie(response);
            this.warnCookieGenerator.removeCookie(response);
        }

        if (this.followServiceRedirects && service != null) {
            return new ModelAndView(new RedirectView(service));
        }

        return new ModelAndView(this.logoutView);
    }

五、onmpw1收到提交的印证新闻,起先验证那个音讯。假设注解成功,则标志该客户已经报到。然后会创立带有登陆顾客新闻的cookie,并将其参与响应音信中。

 

[动静: 浏览器还不曾表达的cookie音讯]

假如直接访问CAS的logout话,会油可是生注销成功页面,其实大多数情景下这些页面是没有要求的,更加多的供给恐怕是退出后展现登陆页面,况且登陆成功后依旧会跻身到前边的事务类别,

六、onmpw1一时还不去响应浏览器的央浼。那时它将会向浏览器发送重定向到www.onmpw2.com(以下简称onmpw2)的授命,並且还蕴涵在onmpw2站点必要重回的url地址,该地点为最早onmpw第11中学的。因为cookie新闻已经在响应消息中,所以那一个cookie也被发送给浏览器了。

当this.followServiceRedirects && service != null时才会跳转到本人钦命的view,service应该都相比熟习了,它是顾客传的参数,

[意况: 浏览器还一向不认证的cookie音讯]

点名cas大旨中间转播哪个地方,但大家只有传service 依旧不行的,还必要把followServiceRedirects属性设为true,上面看看哪些修改那几个性情

七、浏览器接收道带有验证的cookie消息和重定向到onmpw2的一声令下的响应音讯之后,将cookie音信的域设置为onmpw2存款和储蓄到本地,并且想onmpw2发送须要。那几个伏乞中会带有刚才的cookie音信。

那么能够修改cas-servlet.xml文件,在"logoutController"的bean配置中扩张质量“follow瑟维斯Redirects”,设置为“true”,然后在工作系统的吊销连接中参预"service参数",值为职业系统的断然U酷威L,那样就OK了,如您的事体种类UOdysseyL为:,那么注销UWranglerL就为:

[意况:浏览器中早已怀有属域为onmpw2的cookie音讯]

 

八、onmpw2立刻会重定向到供给回到的url地址,何况通过读取浏览器发送的cookie消息,获取到onmpw1的cookie。并将那cookie也一齐发送给浏览器。

假如出现这种场合:访问过http://localhost:8080/cas/logout事后不关浏览器,还能够访谈小编的应用

[意况:浏览器中早已有所属域为onmpw2的cookie消息]

可能因为:

九、浏览器在承受到那一个音信之后,会将所属域为onmpw1的cookie存款和储蓄在地面。并且再度向onmpw1发送多少个包涵cookie音信的央求。

1:你的CAS服务器将cookie设置成了浏览器有效,那么表示只要浏览器不休息,则一直有效。

[气象:浏览器中一度具备属域为onmpw2和onmpw1的cookie音信]

TAG标签:
版权声明:本文由www.129028.com-澳门金沙唯一官网www129028com发布于编程新闻,转载请注明出处:然后经过CAS认证后跻身应用程式1,未有配备退出