zhongrj
2024-03-29 19135908721264e4027d2b262a33b0fc1ee41da2
日志接口数据设置查询修改
7 files modified
1 files added
211 ■■■■ changed files
src/main/java/org/springblade/common/constant/CommonConstant.java 2 ●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/controller/LogApiController.java 19 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/entity/LogApiExt.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/mapper/LogApiMapper.java 15 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/mapper/LogApiMapper.xml 37 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/service/ILogApiService.java 12 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/service/impl/LogApiServiceImpl.java 16 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/service/impl/LogServiceImpl.java 91 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/common/constant/CommonConstant.java
@@ -28,7 +28,7 @@
    /**
     * app name
     */
    String APPLICATION_NAME = AppConstant.APPLICATION_NAME_PREFIX + "api";
    String APPLICATION_NAME = "jczz-" + "api";
    /**
     * sword 系统名
src/main/java/org/springblade/modules/system/controller/LogApiController.java
@@ -26,6 +26,7 @@
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R;
import org.springblade.modules.system.service.ILogApiService;
import org.springblade.modules.system.entity.LogApiExt;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@@ -52,7 +53,7 @@
     * 查询单条
     */
    @GetMapping("/detail")
    public R<LogApi> detail(LogApi log) {
    public R<LogApi> detail(LogApiExt log) {
        return R.data(logService.getOne(Condition.getQueryWrapper(log)));
    }
@@ -60,8 +61,20 @@
     * 查询多条(分页)
     */
    @GetMapping("/list")
    public R<IPage<LogApi>> list(@ApiIgnore @RequestParam Map<String, Object> log, Query query) {
        IPage<LogApi> pages = logService.page(Condition.getPage(query.setDescs("create_time")), Condition.getQueryWrapper(log, LogApi.class));
    public R<IPage<LogApiExt>> list(@ApiIgnore @RequestParam Map<String, Object> log, Query query) {
        IPage<LogApiExt> pages = logService.page(Condition.getPage(query.setDescs("create_time")), Condition.getQueryWrapper(log, LogApiExt.class));
        return R.data(pages);
    }
    /**
     * 查询多条(自定义分页)
     * @param logApi
     * @param query
     * @return
     */
    @GetMapping("/page")
    public R<IPage<LogApiExt>> selectLogApiExtPage(LogApiExt logApi, Query query) {
        IPage<LogApiExt> pages = logService.selectLogApiExtPage(Condition.getPage(query), logApi);
        return R.data(pages);
    }
src/main/java/org/springblade/modules/system/entity/LogApiExt.java
New file
@@ -0,0 +1,19 @@
package org.springblade.modules.system.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springblade.core.log.model.LogApi;
@Data
@TableName("blade_log_api")
public class LogApiExt extends LogApi {
    private static final long serialVersionUID = 1L;
    /**
     * 应用id
     */
    @ApiModelProperty(value = "应用id")
    private String applicationId;
}
src/main/java/org/springblade/modules/system/mapper/LogApiMapper.java
@@ -17,13 +17,24 @@
package org.springblade.modules.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springblade.core.log.model.LogApi;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.springblade.modules.system.entity.LogApiExt;
import java.util.List;
/**
 * Mapper 接口
 *
 * @author Chill
 */
public interface LogApiMapper extends BaseMapper<LogApi> {
public interface LogApiMapper extends BaseMapper<LogApiExt> {
    /**
     * 查询多条(自定义分页)
     * @param logApi
     * @param logApi
     * @return
     */
    List<LogApiExt> selectLogApiExtPage(IPage<LogApiExt> page,@Param("logApi") LogApiExt logApi);
}
src/main/java/org/springblade/modules/system/mapper/LogApiMapper.xml
@@ -2,25 +2,22 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.springblade.modules.system.mapper.LogApiMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="logResultMap" type="org.springblade.core.log.model.LogApi">
        <result column="id" property="id"/>
        <result column="create_time" property="createTime"/>
        <result column="service_id" property="serviceId"/>
        <result column="server_host" property="serverHost"/>
        <result column="server_ip" property="serverIp"/>
        <result column="env" property="env"/>
        <result column="type" property="type"/>
        <result column="title" property="title"/>
        <result column="method" property="method"/>
        <result column="request_uri" property="requestUri"/>
        <result column="user_agent" property="userAgent"/>
        <result column="remote_ip" property="remoteIp"/>
        <result column="method_class" property="methodClass"/>
        <result column="method_name" property="methodName"/>
        <result column="params" property="params"/>
        <result column="time" property="time"/>
        <result column="create_by" property="createBy"/>
    </resultMap>
    <!--自定义分页查询-->
    <select id="selectLogApiExtPage" resultType="org.springblade.modules.system.entity.LogApiExt">
        select * from blade_log_api where 1 = 1
        <if test="logApi.type!=null and logApi.type!=''">
            and type = #{logApi.type}
        </if>
        <if test="logApi.applicationId!=null and logApi.applicationId!=''">
            and application_id = #{logApi.type}
        </if>
        <if test="logApi.serviceId!=null and logApi.serviceId!=''">
            and service_id like concat('%',#{logApi.serviceId},'%')
        </if>
        <if test="logApi.serverHost!=null and logApi.serverHost!=''">
            and server_host like concat('%',#{logApi.serverHost},'%')
        </if>
        order by id desc,create_time desc
    </select>
</mapper>
src/main/java/org/springblade/modules/system/service/ILogApiService.java
@@ -16,14 +16,22 @@
 */
package org.springblade.modules.system.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springblade.core.log.model.LogApi;
import org.springblade.modules.system.entity.LogApiExt;
/**
 * 服务类
 *
 * @author Chill
 */
public interface ILogApiService extends IService<LogApi> {
public interface ILogApiService extends IService<LogApiExt> {
    /**
     * 查询多条(自定义分页)
     * @param logApi
     * @param logApi
     * @return
     */
    IPage<LogApiExt> selectLogApiExtPage(IPage<LogApiExt> page, LogApiExt logApi);
}
src/main/java/org/springblade/modules/system/service/impl/LogApiServiceImpl.java
@@ -16,10 +16,11 @@
 */
package org.springblade.modules.system.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springblade.core.log.model.LogApi;
import org.springblade.modules.system.mapper.LogApiMapper;
import org.springblade.modules.system.service.ILogApiService;
import org.springblade.modules.system.entity.LogApiExt;
import org.springframework.stereotype.Service;
/**
@@ -28,7 +29,16 @@
 * @author Chill
 */
@Service
public class LogApiServiceImpl extends ServiceImpl<LogApiMapper, LogApi> implements ILogApiService {
public class LogApiServiceImpl extends ServiceImpl<LogApiMapper, LogApiExt> implements ILogApiService {
    /**
     * 查询多条(自定义分页)
     * @param logApi
     * @param logApi
     * @return
     */
    @Override
    public IPage<LogApiExt> selectLogApiExtPage(IPage<LogApiExt> page, LogApiExt logApi) {
        return page.setRecords(baseMapper.selectLogApiExtPage(page,logApi));
    }
}
src/main/java/org/springblade/modules/system/service/impl/LogServiceImpl.java
@@ -4,11 +4,22 @@
import org.springblade.core.log.model.LogApi;
import org.springblade.core.log.model.LogError;
import org.springblade.core.log.model.LogUsual;
import org.springblade.core.secure.exception.SecureException;
import org.springblade.core.tool.utils.Charsets;
import org.springblade.core.tool.utils.Func;
import org.springblade.modules.system.service.ILogApiService;
import org.springblade.modules.system.service.ILogErrorService;
import org.springblade.modules.system.service.ILogService;
import org.springblade.modules.system.service.ILogUsualService;
import org.springblade.modules.system.entity.LogApiExt;
import org.springframework.stereotype.Service;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.util.Base64;
import java.util.Objects;
/**
 * Created by Blade.
@@ -17,7 +28,19 @@
 */
@Service
@AllArgsConstructor
public class LogServiceImpl implements ILogService {
public class LogServiceImpl implements ILogService, ServletRequestListener {
    private HttpServletRequest request = null;
    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        request = (HttpServletRequest) sre.getServletRequest();
    }
    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
    }
    private final ILogUsualService usualService;
    private final ILogApiService apiService;
@@ -30,12 +53,76 @@
    @Override
    public Boolean saveApiLog(LogApi log) {
        return apiService.save(log);
        LogApiExt api = new LogApiExt();
        try {
            String[] tokens = extractAndDecodeHeader();
            api.setApplicationId(tokens[0]);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        api.setTitle(log.getTitle());
        api.setTime(log.getTime());
        api.setTenantId(log.getTenantId());
        api.setServiceId(log.getServiceId());
        api.setServerIp(log.getServerIp());
        api.setEnv(log.getEnv());
        api.setServerHost(log.getServerHost());
        api.setRemoteIp(log.getRemoteIp());
        api.setRequestUri(log.getRequestUri());
        api.setUserAgent(log.getUserAgent());
        api.setMethod(log.getMethod());
        api.setMethodName(log.getMethodName());
        api.setMethodClass(log.getMethodClass());
        api.setCreateTime(log.getCreateTime());
        api.setCreateBy(log.getCreateBy());
        if (log.getRequestUri().equals("/blade-auth/oauth/token")){
            api.setType("1");
        }else {
            api.setType("2");
        }
        // 保存
        return apiService.save(api);
    }
    @Override
    public Boolean saveErrorLog(LogError log) {
        return errorService.save(log);
    }
    /**
     * 解析请求头
     * @return
     */
    public String[] extractAndDecodeHeader() throws UnsupportedEncodingException {
        try {
            String header = ((HttpServletRequest) Objects.requireNonNull(request)).getHeader("Authorization");
            header = Func.toStr(header).replace("Basic%20", "Basic ");
            if (!header.startsWith("Basic ")) {
                throw new SecureException("未获取到请求头[Authorization]的信息");
            } else {
                byte[] base64Token = header.substring(6).getBytes(Charsets.UTF_8_NAME);
                byte[] decoded;
                try {
                    decoded = Base64.getDecoder().decode(base64Token);
                } catch (IllegalArgumentException var5) {
                    throw new RuntimeException("客户端令牌解析失败");
                }
                String token = new String(decoded, Charsets.UTF_8_NAME);
                int index = token.indexOf(":");
                if (index == -1) {
                    throw new RuntimeException("客户端令牌不合法");
                } else {
                    return new String[]{token.substring(0, index), token.substring(index + 1)};
                }
            }
        } catch (Throwable var6) {
            throw var6;
        }
    }
}