单点登录多地踢掉第一个登录的人

本文详细解析了在CAS认证系统中,如何通过修改SendTicketGrantingTicketAction类中的doExecute方法来处理登录状态的重复问题及Ticket的管理。特别关注了在用户登录时,如何检查并销毁先前存在的TicketGrantingTicket,以及如何正确设置和更新TicketGrantingTicket的Cookie。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在类SendTicketGrantingTicketAction.java中修改的

 protected Event doExecute(final RequestContext context) {
        final String ticketGrantingTicketId = WebUtils.getTicketGrantingTicketId(context); 
        final String ticketGrantingTicketValueFromCookie = (String) context.getFlowScope().get("ticketGrantingTicketId");
        
        if (ticketGrantingTicketId == null) {
            return success();
        }
        
        try {
        	/*
        	 * 根据用户和密码存放ticket 后者登录踢掉前者
        	 */
 	    String ticketIdkey = context.getRequestParameters().get("username")+"$"+context.getRequestParameters().get("password");
// 	    String contextKey = ticketIdkey + "#";
        if(LoginRememberMap.LoginCookieRemberTicket.get(ticketIdkey) != null){

            
//            HttpSession httpSession = WebUtils.getHttpServletRequest(LoginRememberMap.LoginCookieRemberContent.get(contextKey)).getSession();
//            httpSession.setAttribute("loginRepeat", "您的账号已在别处登录!");
            
        	this.centralAuthenticationService
            .destroyTicketGrantingTicket(LoginRememberMap.LoginCookieRemberTicket.get(ticketIdkey));
        }
//        LoginRememberMap.LoginCookieRemberContent.put(contextKey, context);
        LoginRememberMap.LoginCookieRemberTicket.put(ticketIdkey, ticketGrantingTicketId);
        
        
		} catch (Exception e) {
			e.printStackTrace();
		}
        
        this.ticketGrantingTicketCookieGenerator.addCookie(WebUtils.getHttpServletRequest(context), WebUtils
            .getHttpServletResponse(context), ticketGrantingTicketId);

        if (ticketGrantingTicketValueFromCookie != null && !ticketGrantingTicketId.equals(ticketGrantingTicketValueFromCookie)) {
            this.centralAuthenticationService
                .destroyTicketGrantingTicket(ticketGrantingTicketValueFromCookie);
        }

        return success();
    }

记得注销的时候还要移除相应的

源码看的不明不白的,提示信息一直传不到页面,

转载于:https://my.oschina.net/u/941775/blog/494614

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值