diff --git a/eladmin-common/pom.xml b/eladmin-common/pom.xml index af94c4df68efb520fde2bc27ea33745a15d7563c..3424108f2697e02e52d6f292c395ce7aa5eb16db 100644 --- a/eladmin-common/pom.xml +++ b/eladmin-common/pom.xml @@ -11,5 +11,4 @@ eladmin-common 公共模块 - \ No newline at end of file diff --git a/eladmin-common/src/main/java/me/zhengjie/utils/StringUtils.java b/eladmin-common/src/main/java/me/zhengjie/utils/StringUtils.java index 264fee0e4a956fe99ae5bbbf72bda0c111c76693..8f865f2ee284de52747fd87d8600eefa0665ad60 100644 --- a/eladmin-common/src/main/java/me/zhengjie/utils/StringUtils.java +++ b/eladmin-common/src/main/java/me/zhengjie/utils/StringUtils.java @@ -1,6 +1,8 @@ package me.zhengjie.utils; import cn.hutool.core.io.resource.ClassPathResource; +import eu.bitwalker.useragentutils.Browser; +import eu.bitwalker.useragentutils.UserAgent; import org.lionsoul.ip2region.DataBlock; import org.lionsoul.ip2region.DbConfig; import org.lionsoul.ip2region.DbSearcher; @@ -157,6 +159,12 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils { return ""; } + public static String getBrowser(HttpServletRequest request){ + UserAgent userAgent = UserAgent.parseUserAgentString(request.getHeader("User-Agent")); + Browser browser = userAgent.getBrowser(); + return browser.getName(); + } + /** * 获得当天是周几 */ diff --git a/eladmin-logging/src/main/java/me/zhengjie/aspect/LogAspect.java b/eladmin-logging/src/main/java/me/zhengjie/aspect/LogAspect.java index 9f6d4912435f21beaf309314a4dd6ef9de9e5239..a212ddf44402e08018671be334547dce15cf6a7f 100644 --- a/eladmin-logging/src/main/java/me/zhengjie/aspect/LogAspect.java +++ b/eladmin-logging/src/main/java/me/zhengjie/aspect/LogAspect.java @@ -15,6 +15,8 @@ import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; +import javax.servlet.http.HttpServletRequest; + /** * @author Zheng Jie * @date 2018-11-24 @@ -51,7 +53,8 @@ public class LogAspect { currentTime = System.currentTimeMillis(); result = joinPoint.proceed(); Log log = new Log("INFO",System.currentTimeMillis() - currentTime); - logService.save(getUsername(), StringUtils.getIp(RequestHolder.getHttpServletRequest()),joinPoint, log); + HttpServletRequest request = RequestHolder.getHttpServletRequest(); + logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request),joinPoint, log); return result; } @@ -65,7 +68,8 @@ public class LogAspect { public void logAfterThrowing(JoinPoint joinPoint, Throwable e) { Log log = new Log("ERROR",System.currentTimeMillis() - currentTime); log.setExceptionDetail(ThrowableUtil.getStackTrace(e).getBytes()); - logService.save(getUsername(), StringUtils.getIp(RequestHolder.getHttpServletRequest()), (ProceedingJoinPoint)joinPoint, log); + HttpServletRequest request = RequestHolder.getHttpServletRequest(); + logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request), (ProceedingJoinPoint)joinPoint, log); } public String getUsername() { diff --git a/eladmin-logging/src/main/java/me/zhengjie/domain/Log.java b/eladmin-logging/src/main/java/me/zhengjie/domain/Log.java index 564ab9410c18205bfbc2d7bac6b676d327c87731..a977fee92b366cbdf3dc71edcad4752773fd0788 100644 --- a/eladmin-logging/src/main/java/me/zhengjie/domain/Log.java +++ b/eladmin-logging/src/main/java/me/zhengjie/domain/Log.java @@ -45,6 +45,8 @@ public class Log implements Serializable { @Column(name = "address") private String address; + private String browser; + // 请求耗时 private Long time; diff --git a/eladmin-logging/src/main/java/me/zhengjie/service/LogService.java b/eladmin-logging/src/main/java/me/zhengjie/service/LogService.java index b5e52732a6bc3f897f4b6bbc4f9f98e7cc42c918..7c05812c3de64431adff4d7c1d68a06784030a4a 100644 --- a/eladmin-logging/src/main/java/me/zhengjie/service/LogService.java +++ b/eladmin-logging/src/main/java/me/zhengjie/service/LogService.java @@ -17,7 +17,7 @@ public interface LogService { Object queryAllByUser(LogQueryCriteria criteria, Pageable pageable); @Async - void save(String username, String ip, ProceedingJoinPoint joinPoint, Log log); + void save(String username, String browser, String ip, ProceedingJoinPoint joinPoint, Log log); /** * 查询异常详情 diff --git a/eladmin-logging/src/main/java/me/zhengjie/service/dto/LogErrorDTO.java b/eladmin-logging/src/main/java/me/zhengjie/service/dto/LogErrorDTO.java index 7aaa54b2c1a67b15f5b000b4257e36be8d3e1c6d..1548ef00240c878a9383c6067a129c9e7002551d 100644 --- a/eladmin-logging/src/main/java/me/zhengjie/service/dto/LogErrorDTO.java +++ b/eladmin-logging/src/main/java/me/zhengjie/service/dto/LogErrorDTO.java @@ -25,6 +25,8 @@ public class LogErrorDTO implements Serializable { // 参数 private String params; + private String browser; + // 请求ip private String requestIp; diff --git a/eladmin-logging/src/main/java/me/zhengjie/service/dto/LogSmallDTO.java b/eladmin-logging/src/main/java/me/zhengjie/service/dto/LogSmallDTO.java index 5d11c347ef4ccb390a1deb7641f85bede7fcb279..22e41fb28bea29905536e5b0a45e60e8a211d456 100644 --- a/eladmin-logging/src/main/java/me/zhengjie/service/dto/LogSmallDTO.java +++ b/eladmin-logging/src/main/java/me/zhengjie/service/dto/LogSmallDTO.java @@ -22,6 +22,8 @@ public class LogSmallDTO implements Serializable { private String address; + private String browser; + // 创建日期 private Timestamp createTime; } diff --git a/eladmin-logging/src/main/java/me/zhengjie/service/impl/LogServiceImpl.java b/eladmin-logging/src/main/java/me/zhengjie/service/impl/LogServiceImpl.java index 66bff12fb8e6134af7057be835ba70e3f8bab3f3..8a1158c676eccf0b1761be18d001e09255e870cb 100644 --- a/eladmin-logging/src/main/java/me/zhengjie/service/impl/LogServiceImpl.java +++ b/eladmin-logging/src/main/java/me/zhengjie/service/impl/LogServiceImpl.java @@ -57,7 +57,7 @@ public class LogServiceImpl implements LogService { @Override @Transactional(rollbackFor = Exception.class) - public void save(String username, String ip, ProceedingJoinPoint joinPoint, Log log){ + public void save(String username, String browser, String ip, ProceedingJoinPoint joinPoint, Log log){ MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); @@ -96,6 +96,7 @@ public class LogServiceImpl implements LogService { log.setMethod(methodName); log.setUsername(username); log.setParams(params.toString() + " }"); + log.setBrowser(browser); logRepository.save(log); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/monitor/domain/vo/OnlineUser.java b/eladmin-system/src/main/java/me/zhengjie/modules/monitor/domain/vo/OnlineUser.java new file mode 100644 index 0000000000000000000000000000000000000000..ae4fb2ca6143171a916a39316a32591466a694c0 --- /dev/null +++ b/eladmin-system/src/main/java/me/zhengjie/modules/monitor/domain/vo/OnlineUser.java @@ -0,0 +1,24 @@ +package me.zhengjie.modules.monitor.domain.vo; + +import lombok.Data; +import java.sql.Timestamp; +import java.util.Date; + +/** + * @author Zheng Jie + */ +@Data +public class OnlineUser { + + private String userName; + + private String browser; + + private String ip; + + private String address; + + private Date createTime; + + private Date lastAccessTime; +} diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/rest/AuthenticationController.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/rest/AuthenticationController.java index d27e1fd53bb2c277483a173aa955efb7172069b8..b62329c2f78c277911352857bb3266a7b8297805 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/security/rest/AuthenticationController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/rest/AuthenticationController.java @@ -8,8 +8,8 @@ import lombok.extern.slf4j.Slf4j; import me.zhengjie.aop.log.Log; import me.zhengjie.exception.BadRequestException; import me.zhengjie.modules.monitor.service.RedisService; -import me.zhengjie.modules.security.security.AuthenticationInfo; -import me.zhengjie.modules.security.security.AuthorizationUser; +import me.zhengjie.modules.security.security.AuthInfo; +import me.zhengjie.modules.security.security.AuthUser; import me.zhengjie.modules.security.security.ImgResult; import me.zhengjie.modules.security.security.JwtUser; import me.zhengjie.utils.EncryptUtils; @@ -53,7 +53,7 @@ public class AuthenticationController { @Log("用户登录") @ApiOperation("登录授权") @PostMapping(value = "/login") - public ResponseEntity login(@Validated @RequestBody AuthorizationUser authorizationUser){ + public ResponseEntity login(@Validated @RequestBody AuthUser authorizationUser){ // 查询验证码 String code = redisService.getCodeVal(authorizationUser.getUuid()); @@ -79,7 +79,7 @@ public class AuthenticationController { final String token = jwtTokenUtil.generateToken(jwtUser); // 返回 token - return ResponseEntity.ok(new AuthenticationInfo(token,jwtUser)); + return ResponseEntity.ok(new AuthInfo(token,jwtUser)); } @ApiOperation("获取用户信息") diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/security/AuthenticationInfo.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/security/AuthInfo.java similarity index 79% rename from eladmin-system/src/main/java/me/zhengjie/modules/security/security/AuthenticationInfo.java rename to eladmin-system/src/main/java/me/zhengjie/modules/security/security/AuthInfo.java index 65fa723223b089eaa3f38ab41fbe1eeadba3a976..94bb2ab6af9dd1c565bf4121c05f4066329fe6a0 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/security/security/AuthenticationInfo.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/security/AuthInfo.java @@ -1,19 +1,19 @@ -package me.zhengjie.modules.security.security; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import java.io.Serializable; - -/** - * @author Zheng Jie - * @date 2018-11-23 - * 返回token - */ -@Getter -@AllArgsConstructor -public class AuthenticationInfo implements Serializable { - - private final String token; - - private final JwtUser user; -} +package me.zhengjie.modules.security.security; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import java.io.Serializable; + +/** + * @author Zheng Jie + * @date 2018-11-23 + * 返回token + */ +@Getter +@AllArgsConstructor +public class AuthInfo implements Serializable { + + private final String token; + + private final JwtUser user; +} diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/security/AuthorizationUser.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/security/AuthUser.java similarity index 93% rename from eladmin-system/src/main/java/me/zhengjie/modules/security/security/AuthorizationUser.java rename to eladmin-system/src/main/java/me/zhengjie/modules/security/security/AuthUser.java index 1b93aca54adbcef2ac30fca79ad565fb1fba9ec6..8c3a9608c2f4e9b002c96953c1b5dd8bf087461d 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/security/security/AuthorizationUser.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/security/AuthUser.java @@ -11,7 +11,7 @@ import javax.validation.constraints.NotBlank; */ @Getter @Setter -public class AuthorizationUser { +public class AuthUser { @NotBlank private String username; diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/security/JwtAuthorizationTokenFilter.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/security/JwtAuthorizationTokenFilter.java index 1693bcc1d4e8a13570e8d751e1e90eb91fea8112..99a8dbf541f8950eeeec0814870b9bb9e2d39bf6 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/security/security/JwtAuthorizationTokenFilter.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/security/JwtAuthorizationTokenFilter.java @@ -7,7 +7,6 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; import org.springframework.stereotype.Component; diff --git a/pom.xml b/pom.xml index 87bd2062556f2061b501afdd88ce876787ef518b..4d91d796ca1120197a485974350d20004f8d41ff 100644 --- a/pom.xml +++ b/pom.xml @@ -200,6 +200,11 @@ easy-captcha 1.6.2 + + eu.bitwalker + UserAgentUtils + 1.20 +