feat: 新增 [CAS诊断] 日志

This commit is contained in:
2026-10-22 17:15:49 +08:00
parent e257f4bae2
commit 98c7804c28
2 changed files with 34 additions and 4 deletions
@@ -178,14 +178,35 @@ public class SysLoginController {
@ApiOperation("用户cas登录统一入口")
public String ssoLogin(HttpSession httpSession, HttpServletRequest request, HttpServletResponse response) {
Assertion assertion = (Assertion) request.getSession().getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION);
String tokenName = StpUtil.getTokenName();
boolean tokenCookiePresent = request.getCookies() != null && java.util.Arrays.stream(request.getCookies())
.anyMatch(cookie -> tokenName.equals(cookie.getName()) && StrUtil.isNotBlank(cookie.getValue()));
log.infof("[CAS诊断] 回调进入 uri=%s, ticketPresent=%s, sessionNew=%s, requestedSessionValid=%s, sessionAssertion=%s, requestAssertion=%s, tokenCookiePresent=%s, secure=%s",
request.getRequestURI(), StrUtil.isNotBlank(request.getParameter("ticket")), httpSession.isNew(),
request.isRequestedSessionIdValid(), assertion != null && assertion.getPrincipal() != null,
request.getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION) != null, tokenCookiePresent, request.isSecure());
if (null == assertion || assertion.getPrincipal() == null) {
log.warn("[CAS诊断] Session 中没有有效认证结果,未执行本地登录,即将跳转首页");
return ">>:/platform/home";
}
String loginName = assertion.getPrincipal().getName();
sysUserService.checkThirdPlatformLoginName(loginName);
Sys_user sysUser = sysUserService.loginByLoginName(loginName);
return ">>:" + sysUserService.loginPlus(sysUser, LoginType.CAS, request);
String stage = "查询本地用户";
try {
sysUserService.checkThirdPlatformLoginName(loginName);
Sys_user sysUser = sysUserService.loginByLoginName(loginName);
stage = "建立本地登录态";
log.info("[CAS诊断] 本地用户查询成功,开始执行 loginPlus");
String redirect = sysUserService.loginPlus(sysUser, LoginType.CAS, request);
boolean tokenCookieWritten = response.getHeaders("Set-Cookie").stream()
.anyMatch(header -> header.startsWith(tokenName + "="));
log.infof("[CAS诊断] 本地登录完成 loggedIn=%s, tokenCookieWritten=%s, responseCommitted=%s, appDomain=%s, redirectPath=%s",
StpUtil.isLogin(), tokenCookieWritten, response.isCommitted(), Globals.AppDomain,
redirect == null ? null : redirect.split("[?#]", 2)[0]);
return ">>:" + redirect;
} catch (RuntimeException e) {
log.warnf("[CAS诊断] 回调失败 stage=%s, exceptionType=%s", stage, e.getClass().getName());
throw e;
}
}
@At(value = "/platform/wxwork/oauth2/callback", top = true)
@@ -163,6 +163,15 @@ public class WkFailProcessor extends ViewProcessor {
*/
private void notLoginRedirect(HttpServletRequest request, HttpServletResponse response) throws Throwable {
Assertion assertion = (Assertion) request.getSession().getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION);
if (Globals.sso) {
String tokenName = cn.dev33.satoken.stp.StpUtil.getTokenName();
boolean tokenCookiePresent = request.getCookies() != null && java.util.Arrays.stream(request.getCookies())
.anyMatch(cookie -> tokenName.equals(cookie.getName()) && StrUtil.isNotBlank(cookie.getValue()));
log.infof("[CAS诊断] 未登录跳转 uri=%s, sessionAssertion=%s, requestedSessionValid=%s, tokenCookiePresent=%s, tokenHeaderPresent=%s, tokenParameterPresent=%s, secure=%s, appDomain=%s",
request.getRequestURI(), assertion != null && assertion.getPrincipal() != null,
request.isRequestedSessionIdValid(), tokenCookiePresent, StrUtil.isNotBlank(request.getHeader(tokenName)),
StrUtil.isNotBlank(request.getParameter(tokenName)), request.isSecure(), Globals.AppDomain);
}
if (assertion != null && assertion.getPrincipal() != null) {
// //判断cas里面是否有用户名 那么造成的原因就是系统中没他的信息
// //就是cas已经认证了 但是本地系统没有认证