2021与蓝度共同重构项目,服务端
chenjiantian
2021-11-29 a35594535efe8f5499cd8fec4496ca0951ef3e23
基础功能完善
已修改2个文件
已添加2个文件
95 ■■■■■ 文件已修改
dao/src/main/java/com/sandu/ximon/dao/enums/AdministratorEnums.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/context/CustomerInspectContextHolder.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/filter/CustomerInspectContextHolderFilter.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/security/SecurityUtils.java 2 ●●● 补丁 | 查看 | 原始文档 | 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());