| dao/src/main/java/com/sandu/ximon/dao/enums/AdministratorEnums.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| ximon-admin/src/main/java/com/sandu/ximon/admin/context/CustomerInspectContextHolder.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| ximon-admin/src/main/java/com/sandu/ximon/admin/filter/CustomerInspectContextHolderFilter.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| ximon-admin/src/main/java/com/sandu/ximon/admin/security/SecurityUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
dao/src/main/java/com/sandu/ximon/dao/enums/AdministratorEnums.java
@@ -15,10 +15,6 @@ * å®¢æ· */ CUSTOMER(1), /** * 管çåè´¦å·è¿å ¥å®¢æ· */ INSPECT_CUSTOMER(2), ; private final Integer code; ximon-admin/src/main/java/com/sandu/ximon/admin/context/CustomerInspectContextHolder.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,44 @@ package com.sandu.ximon.admin.context; import lombok.experimental.UtilityClass; /** * å¤ç§æ·Holder * * @author pangu * @since 2020-9-8 */ @UtilityClass public class CustomerInspectContextHolder { /** * æ¯æç¶å线ç¨ä¹é´çæ°æ®ä¼ é */ private final ThreadLocal<String> THREAD_LOCAL_TENANT = new ThreadLocal<>(); /** * TTL è®¾ç½®ç§æ·ID<br/> * <b>è°¨æ ä½¿ç¨æ¤æ¹æ³,é¿å åµå¥è°ç¨ãå°½éä½¿ç¨ {@code TenantBroker} </b> * * @param tenantId ç§æ·ID */ public void setTenantId(String tenantId) { THREAD_LOCAL_TENANT.set(tenantId); } /** * è·åTTLä¸çç§æ·ID * * @return String */ public String getTenantId() { return THREAD_LOCAL_TENANT.get(); } /** * æ¸ é¤tenantId */ public void clear() { THREAD_LOCAL_TENANT.remove(); } } ximon-admin/src/main/java/com/sandu/ximon/admin/filter/CustomerInspectContextHolderFilter.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,45 @@ package com.sandu.ximon.admin.filter; import com.sandu.ximon.admin.context.CustomerInspectContextHolder; import jodd.util.StringUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.catalina.security.SecurityUtil; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import org.springframework.web.filter.GenericFilterBean; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * 管çåè®¿å®¢è¿æ»¤ * @author chenjiantian */ @Slf4j @Component @Order(Ordered.HIGHEST_PRECEDENCE) public class CustomerInspectContextHolderFilter extends GenericFilterBean { @Override @SneakyThrows public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; try { String customer = request.getHeader("customer"); if (StringUtil.isNotBlank(customer)) { CustomerInspectContextHolder.setTenantId(customer); } filterChain.doFilter(request, response); } finally { CustomerInspectContextHolder.clear(); } } } ximon-admin/src/main/java/com/sandu/ximon/admin/security/SecurityUtils.java
@@ -40,7 +40,7 @@ throw new BusinessException(ResponseStatusEnums.TOKEN_INVALID.getCode(), ResponseStatusEnums.TOKEN_INVALID.getMessage()); } Integer administratorIdentity = getAdministratorIdentity(); if (AdministratorEnums.ADMIN.getCode().equals(administratorIdentity) || AdministratorEnums.INSPECT_CUSTOMER.getCode().equals(administratorIdentity)) { if (AdministratorEnums.ADMIN.getCode().equals(administratorIdentity) ) { UserDetails userDetails = (UserDetails) authentication.getPrincipal(); UserDetailsService userDetailsService = SpringContextHolder.getBean("adminDetailsService"); return userDetailsService.loadUserByUsername(userDetails.getUsername());