feat: 新增 [CAS诊断] 日志
This commit is contained in:
@@ -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已经认证了 但是本地系统没有认证
|
||||
|
||||
Reference in New Issue
Block a user