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";
|
}
|
}
|