你的位置:首页 > 软件开发 > Java > cas+shiro统一注销原理解析

cas+shiro统一注销原理解析

发布时间:2016-01-28 16:00:12
1,客户端发送一个注销请求到cas server,跟踪casorg.jasig.cas.CentralAuthenticationServiceImpl类的destroyTicketGrantingTicket注销方法,服务端注销代码@Audit( action=&qu ...

1,客户端发送一个注销请求到cas server,跟踪casorg.jasig.cas.CentralAuthenticationServiceImpl类的destroyTicketGrantingTicket注销方法,

服务端注销代码

@Audit(      action="TICKET_GRANTING_TICKET_DESTROYED",      actionResolverName="DESTROY_TICKET_GRANTING_TICKET_RESOLVER",      resourceResolverName="DESTROY_TICKET_GRANTING_TICKET_RESOURCE_RESOLVER")  @Profiled(tag = "DESTROY_TICKET_GRANTING_TICKET", logFailuresSeparately = false)  @Transactional(readOnly = false)  @Override  public List<LogoutRequest> destroyTicketGrantingTicket(final String ticketGrantingTicketId) {    Assert.notNull(ticketGrantingTicketId);    logger.debug("Removing ticket [{}] from registry.", ticketGrantingTicketId);    final TicketGrantingTicket ticket = this.ticketRegistry.getTicket(ticketGrantingTicketId,        TicketGrantingTicket.class);    if (ticket == null) {      logger.debug("TicketGrantingTicket [{}] cannot be found in the ticket registry.", ticketGrantingTicketId);      return Collections.emptyList();    }    logger.debug("Ticket found. Processing logout requests and then deleting the ticket...");        //循环遍历客户端的server      for (final String ticketId : services.keySet()) {        final Service service = services.get(ticketId);        // it's a SingleLogoutService, else ignore        if (service instanceof SingleLogoutService) {          final SingleLogoutService singleLogoutService = (SingleLogoutService) service;          // the logout has not performed already          if (!singleLogoutService.isLoggedOutAlready()) {            final LogoutRequest logoutRequest = new LogoutRequest(ticketId, singleLogoutService);            // always add the logout request            logoutRequests.add(logoutRequest);            final RegisteredService registeredService = servicesManager.findServiceBy(service);            // the service is no more defined, or the logout type is not defined or is back channel            if (registeredService == null || registeredService.getLogoutType() == null                || registeredService.getLogoutType() == LogoutType.BACK_CHANNEL) {              // perform back channel logout

原标题:cas+shiro统一注销原理解析

关键词:Shiro

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录