feat: 新增 [CAS诊断] 日志
This commit is contained in:
@@ -178,14 +178,35 @@ public class SysLoginController {
|
|||||||
@ApiOperation("用户cas登录统一入口")
|
@ApiOperation("用户cas登录统一入口")
|
||||||
public String ssoLogin(HttpSession httpSession, HttpServletRequest request, HttpServletResponse response) {
|
public String ssoLogin(HttpSession httpSession, HttpServletRequest request, HttpServletResponse response) {
|
||||||
Assertion assertion = (Assertion) request.getSession().getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION);
|
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) {
|
if (null == assertion || assertion.getPrincipal() == null) {
|
||||||
|
log.warn("[CAS诊断] Session 中没有有效认证结果,未执行本地登录,即将跳转首页");
|
||||||
return ">>:/platform/home";
|
return ">>:/platform/home";
|
||||||
}
|
}
|
||||||
String loginName = assertion.getPrincipal().getName();
|
String loginName = assertion.getPrincipal().getName();
|
||||||
sysUserService.checkThirdPlatformLoginName(loginName);
|
String stage = "查询本地用户";
|
||||||
Sys_user sysUser = sysUserService.loginByLoginName(loginName);
|
try {
|
||||||
|
sysUserService.checkThirdPlatformLoginName(loginName);
|
||||||
return ">>:" + sysUserService.loginPlus(sysUser, LoginType.CAS, request);
|
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)
|
@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 {
|
private void notLoginRedirect(HttpServletRequest request, HttpServletResponse response) throws Throwable {
|
||||||
Assertion assertion = (Assertion) request.getSession().getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION);
|
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) {
|
if (assertion != null && assertion.getPrincipal() != null) {
|
||||||
// //判断cas里面是否有用户名 那么造成的原因就是系统中没他的信息
|
// //判断cas里面是否有用户名 那么造成的原因就是系统中没他的信息
|
||||||
// //就是cas已经认证了 但是本地系统没有认证
|
// //就是cas已经认证了 但是本地系统没有认证
|
||||||
|
|||||||
Reference in New Issue
Block a user