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
+