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