package com.emergencyrepair.common.audit; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @Component public class CurrentUserInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { CurrentUserContext.set(resolveUsername(request)); return true; } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) { CurrentUserContext.clear(); } private String resolveUsername(HttpServletRequest request) { String username = request.getHeader("X-Username"); if (StringUtils.hasText(username)) { return username.trim(); } String authorization = request.getHeader("Authorization"); if (!StringUtils.hasText(authorization)) { return "admin"; } String token = authorization.trim(); if (token.startsWith("Bearer ")) { token = token.substring(7).trim(); } if (token.startsWith("demo-") && token.endsWith("-token")) { token = token.substring(5, token.length() - 6); } return StringUtils.hasText(token) ? token : "admin"; } }