| | |
| | | audit.put("operationName", "账号登录"); |
| | | audit.put("requestMethod", "POST"); |
| | | audit.put("requestUri", "/oauth/getToken"); |
| | | audit.put("requestParams", "username=" + mask(request == null ? null : request.getUsername())); |
| | | audit.put("userAccount", mask(request == null ? null : request.getUsername())); |
| | | audit.put("requestParams", "username=" + (request == null ? null : request.getUsername())); |
| | | // 登录账号是审计追溯字段,不做掩码;密码、token 等敏感字段仍然脱敏。 |
| | | audit.put("userAccount", request == null ? null : request.getUsername()); |
| | | audit.put("result", success ? "SUCCESS" : "FAIL"); |
| | | audit.put("errorMessage", error == null ? null : error.replaceAll("(?i)(password|token)\\s*[:=]\\s*[^,\\s&}]+", "$1=***")); |
| | | audit.put("clientIp", clientIp(httpRequest)); |
| | |
| | | } catch (Exception ignored) { |
| | | // 审计链路不可用时绝不能影响认证主流程;客户端会输出 Feign 异常用于告警。 |
| | | } |
| | | } |
| | | |
| | | private String mask(String value) { |
| | | if (value == null || value.length() <= 4) return "***"; |
| | | return value.substring(0, 3) + "***" + value.substring(value.length() - 2); |
| | | } |
| | | |
| | | private String clientIp(HttpServletRequest request) { |