From f39917e88cb3070e38b8b06b66ea871f0ef5ecc1 Mon Sep 17 00:00:00 2001
From: liaozetao <1107136310@qq.com>
Date: Fri, 8 Dec 2023 12:02:18 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9sa-token=E4=B8=BAredis?=
=?UTF-8?q?=E7=BC=93=E5=AD=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../accompany-admin-service/pom.xml | 7 ++
.../accompany/admin/config/SaTokenConfig.java | 29 +++++
.../accompany/admin/config/WebMvcConfig.java | 9 +-
.../controller/system/LoginController.java | 101 ++++++++----------
.../admin/interceptor/LoggerInterceptor.java | 19 +---
.../admin/interceptor/LoginInterceptor.java | 27 +----
accompany-dependencies/pom.xml | 1 +
7 files changed, 90 insertions(+), 103 deletions(-)
create mode 100644 accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/config/SaTokenConfig.java
diff --git a/accompany-admin/accompany-admin-service/pom.xml b/accompany-admin/accompany-admin-service/pom.xml
index a8a86a0da..f04f887b3 100644
--- a/accompany-admin/accompany-admin-service/pom.xml
+++ b/accompany-admin/accompany-admin-service/pom.xml
@@ -84,6 +84,13 @@
sa-token-spring-boot-starter
${sa-token.version}
+
+
+
+ cn.dev33
+ sa-token-dao-redis-jackson
+ ${sa-token-dao-redis-jackson.version}
+
\ No newline at end of file
diff --git a/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/config/SaTokenConfig.java b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/config/SaTokenConfig.java
new file mode 100644
index 000000000..20d72c56e
--- /dev/null
+++ b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/config/SaTokenConfig.java
@@ -0,0 +1,29 @@
+package com.accompany.admin.config;
+
+import com.accompany.core.config.JedisConfig;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
+import redis.clients.jedis.JedisPoolConfig;
+
+import java.time.Duration;
+
+/**
+ * @author: liaozetao
+ * @date: 2023/12/8 11:53
+ * @description:
+ */
+@Configuration
+public class SaTokenConfig {
+
+ @Bean
+ public RedisConnectionFactory connectionFactory(@Autowired JedisConfig jedisConfig) {
+ JedisPoolConfig poolConfig = new JedisPoolConfig();
+ poolConfig.setMaxIdle(jedisConfig.getMaxIdle());
+ poolConfig.setMaxTotal(jedisConfig.getMaxTotal());
+ poolConfig.setMaxWait(Duration.ofMillis(jedisConfig.getMaxWait()));
+ return new JedisConnectionFactory(poolConfig);
+ }
+}
diff --git a/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/config/WebMvcConfig.java b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/config/WebMvcConfig.java
index f88c85ce1..b73652ebe 100644
--- a/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/config/WebMvcConfig.java
+++ b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/config/WebMvcConfig.java
@@ -20,15 +20,14 @@ public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor()).addPathPatterns("/admin/**")
- .excludePathPatterns("/admin/api/**");
- //registry.addInterceptor(loginInterceptor()).addPathPatterns("/admin/**");
+ .excludePathPatterns("/admin/api/**");
registry.addInterceptor(requestMetricsInterceptor()).addPathPatterns("/admin/**");
}
@Override
- public void configurePathMatch(PathMatchConfigurer configurer) {
- configurer.setUseSuffixPatternMatch(true);
- configurer.setUseTrailingSlashMatch(true);
+ public void configurePathMatch(PathMatchConfigurer configure) {
+ configure.setUseSuffixPatternMatch(true);
+ configure.setUseTrailingSlashMatch(true);
}
@Bean
diff --git a/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/system/LoginController.java b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/system/LoginController.java
index c714caebf..f53ed872a 100644
--- a/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/system/LoginController.java
+++ b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/system/LoginController.java
@@ -3,34 +3,36 @@ package com.accompany.admin.controller.system;
import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.stp.StpUtil;
-import com.accompany.core.util.MD5;
-import com.aliyuncs.exceptions.ClientException;
import com.accompany.admin.controller.BaseController;
import com.accompany.admin.model.AdminUser;
import com.accompany.admin.service.system.AdminLogService;
import com.accompany.admin.service.system.AdminUserService;
import com.accompany.admin.util.StringUtil;
-import com.accompany.core.exception.ServiceException;
-import com.accompany.core.service.common.JedisService;
-import com.accompany.common.utils.IPUtils;
import com.accompany.common.redis.RedisKey;
import com.accompany.common.result.BusiResult;
import com.accompany.common.status.BusiStatus;
import com.accompany.common.utils.BlankUtil;
import com.accompany.common.utils.DateTimeUtil;
+import com.accompany.common.utils.IPUtils;
+import com.accompany.core.exception.ServiceException;
+import com.accompany.core.service.common.JedisService;
+import com.accompany.core.util.MD5;
+import com.aliyuncs.exceptions.ClientException;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.util.Optional;
-@Controller
+@RestController
@RequestMapping("/")
public class LoginController extends BaseController {
@Autowired
@@ -60,49 +62,36 @@ public class LoginController extends BaseController {
* @param password MD5加密后的密码
* @param authCode MD5加密后的验证码
*/
- @RequestMapping("/login/login")
- @ResponseBody
- public void login(String account, String password, String authCode, HttpServletRequest request) throws UnsupportedEncodingException {
- logger.info("admin login account:{},ip:{}",account, IPUtils.getRealIpAddress(request));
- BusiResult result = validateData(account, password, authCode);
- if (result.getCode() == 200) { //参数验证成功
- AdminUser adminUser = adminUserService.getAdminUser(account, password);
- if (adminUser != null) {
- StpUtil.login(adminUser.getId(), 60 * 60);
- /*setAttribute(AdminConstants.HAS_LOGIN, "true", Scope.SESSION);
- setAttribute(AdminConstants.ADMIN_ID, adminUser.getId(), Scope.SESSION);
- setAttribute(AdminConstants.ADMIN_NAME, adminUser.getUsername(), Scope.SESSION);
- Cookie cookie1 = new Cookie(AdminConstants.HAS_LOGIN, "true");
- Cookie cookie2 = new Cookie(AdminConstants.ADMIN_ID, adminUser.getId() + "");
- Cookie cookie3 = new Cookie(AdminConstants.ADMIN_NAME, URLEncoder.encode(adminUser.getUsername(), "utf-8"));
- getResponse().addCookie(cookie1);
- getResponse().addCookie(cookie2);
- getResponse().addCookie(cookie3);*/
- adminUserService.updateLastLogin(adminUser.getId());
- jedisService.hset(RedisKey.httpsession_store.getKey(), adminUser.getId() + "", getRequest().getSession().getId());
- String smsCode = adminUserService.updateLoginRecord(adminUser);
- updateCacheAfterLogin(adminUser);
- adminLogService.insertLog(adminUser.getId(), getClass().getCanonicalName(), "login",
- "params===>>account:" + account + ", password:" + password + ", authCode: " + smsCode);
- logger.info("amdin [" + adminUser.getUsername() + "] login system.");
- writeJson(true, adminUser.getId() + "@" + adminUser.getUsername());
- return;
- } else {
- int surplus = adminUserService.updateLoginErrorCache(account);
- //result = 404; //不存在
- writeJson(false, "404", surplus);
- }
- } else {
- writeJson(false, String.valueOf(result.getCode()), result.getData());
+ @PostMapping("/login/login")
+ public void login(String account, String password, String authCode, HttpServletRequest request) {
+ String ipAddress = IPUtils.getRealIpAddress(request);
+ logger.info("admin login account : {}, ip : {}", account, ipAddress);
+ BusiResult result = validateData(account, password, authCode);
+ //参数验证成功
+ if (!result.isSuccess()) {
+ writeJson(Boolean.FALSE, String.valueOf(result.getCode()), result.getData());
+ return;
}
-
+ AdminUser adminUser = adminUserService.getAdminUser(account, password);
+ if (adminUser == null) {
+ int surplus = adminUserService.updateLoginErrorCache(account);
+ writeJson(false, String.valueOf(HttpStatus.NOT_FOUND.value()), surplus);
+ return;
+ }
+ StpUtil.login(adminUser.getId(), 7 * 24 * 60 * 60);
+ adminUserService.updateLastLogin(adminUser.getId());
+ jedisService.hset(RedisKey.httpsession_store.getKey(), String.valueOf(adminUser.getId()), getRequest().getSession().getId());
+ String smsCode = adminUserService.updateLoginRecord(adminUser);
+ updateCacheAfterLogin(adminUser);
+ adminLogService.insertLog(adminUser.getId(), getClass().getCanonicalName(), "login", "params===>>account:" + account + ", password:" + password + ", authCode: " + smsCode);
+ logger.info("admin [" + adminUser.getUsername() + "] login system.");
+ writeJson(true, adminUser.getId() + "@" + adminUser.getUsername());
}
@Async
public void updateCacheAfterLogin(AdminUser adminUser) {
jedisService.del(RedisKey.admin_sms_code.getKey(adminUser.getUsername()));
jedisService.del(RedisKey.admin_use_old_sms_code.getKey(adminUser.getUsername()));
-
String todayStr = DateTimeUtil.getTodayStr();
String smsCodeErrorCountKey = RedisKey.admin_login_error_count.getKey(todayStr);
jedisService.hdel(smsCodeErrorCountKey, adminUser.getUsername());
@@ -123,7 +112,7 @@ public class LoginController extends BaseController {
int adminId = getAdminId();
logger.info("admin logout, id is:" + adminId);
StpUtil.logout();
- } catch (NotLoginException ignore){
+ } catch (NotLoginException ignore) {
}
@@ -136,32 +125,31 @@ public class LoginController extends BaseController {
/**
* 检验表单数据是否正确
- * @param account
+ *
+ * @param account
* @param password
* @param authCode
* @return
*/
- private BusiResult validateData(String account, String password, String authCode) {
+ private BusiResult validateData(String account, String password, String authCode) {
account = accountFilter(account);
password = StringUtil.filterSpecial(password);
authCode = StringUtil.filterSpecial(authCode);
if (!BlankUtil.isBlank(account)) {
if (BlankUtil.isBlank(password)) {
- //return 2; //密码不能为空
- return new BusiResult(BusiStatus.ALERT_PARAMETER_ILLEGAL);
+ //密码不能为空
+ return BusiResult.fail(BusiStatus.ALERT_PARAMETER_ILLEGAL);
}
if (!checkAuthCode(account, authCode)) {
int surplus = adminUserService.updateLoginErrorCache(account);
- //return 3; //验证码不正确
- BusiResult busiResult = new BusiResult(BusiStatus.SMSCODEERROR);
- busiResult.setData(surplus);
- return busiResult;
+ //验证码不正确
+ return new BusiResult<>(BusiStatus.SMSCODEERROR, surplus);
}
} else {
//return 1; //邮箱不能为空
- return new BusiResult(BusiStatus.ALERT_PARAMETER_ILLEGAL);
+ return BusiResult.fail(BusiStatus.ALERT_PARAMETER_ILLEGAL);
}
- return new BusiResult(BusiStatus.SUCCESS);
+ return BusiResult.success();
}
/**
@@ -180,10 +168,7 @@ public class LoginController extends BaseController {
}
String smsCode = jedisService.get(RedisKey.admin_sms_code.getKey(account));
logger.info("account : {}, smsCode : {}, authCode : {}", account, smsCode, authCode);
- return Optional.ofNullable(smsCode)
- .map(MD5::getMD5)
- .map(sc -> sc.equals(authCode))
- .orElse(false);
+ return Optional.ofNullable(smsCode).map(MD5::getMD5).map(sc -> sc.equals(authCode)).orElse(false);
}
private String accountFilter(String account) {
diff --git a/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/interceptor/LoggerInterceptor.java b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/interceptor/LoggerInterceptor.java
index 92afea792..c738504ea 100644
--- a/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/interceptor/LoggerInterceptor.java
+++ b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/interceptor/LoggerInterceptor.java
@@ -2,10 +2,9 @@ package com.accompany.admin.interceptor;
import com.accompany.admin.common.AdminConstants;
import com.accompany.common.utils.IPUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import lombok.extern.slf4j.Slf4j;
+import org.jetbrains.annotations.NotNull;
import org.springframework.web.servlet.HandlerInterceptor;
-import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -13,25 +12,17 @@ import javax.servlet.http.HttpServletResponse;
/**
* 日志路径处理拦截器
*/
+@Slf4j
public class LoggerInterceptor implements HandlerInterceptor {
- private static final Logger logger = LoggerFactory.getLogger(LoggerInterceptor.class);
@Override
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
+ public boolean preHandle(HttpServletRequest request, @NotNull HttpServletResponse response, @NotNull Object handler) {
Object admin = request.getSession().getAttribute(AdminConstants.ADMIN_ID);
String adminId = admin == null ? null : admin.toString();
String path = request.getRequestURI() + "?" + request.getQueryString();
String ip = IPUtils.getRealIpAddress(request);
- logger.info("request path is: {}, adminId is: {}, ip is: {}", path, adminId, ip);
+ log.info("request path is: {}, adminId is: {}, ip is: {}", path, adminId, ip);
return true;
}
- @Override
- public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) {
- }
-
- @Override
- public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
- }
-
}
diff --git a/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/interceptor/LoginInterceptor.java b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/interceptor/LoginInterceptor.java
index 5e9a2657f..5127ddcbc 100644
--- a/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/interceptor/LoginInterceptor.java
+++ b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/interceptor/LoginInterceptor.java
@@ -2,19 +2,9 @@ package com.accompany.admin.interceptor;
import cn.dev33.satoken.stp.StpUtil;
-import com.accompany.admin.common.AdminConstants;
-import com.accompany.core.service.common.JedisService;
-import com.accompany.common.redis.RedisKey;
-import com.accompany.common.utils.BlankUtil;
-import com.accompany.common.utils.StringUtils;
-import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.HandlerInterceptor;
-import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -23,7 +13,6 @@ import java.io.Writer;
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {
- private static final Logger logger = LoggerFactory.getLogger(LoginInterceptor.class);
private static final String NEED_LOGOUT = "needLogout";
@@ -33,22 +22,8 @@ public class LoginInterceptor implements HandlerInterceptor {
try {
StpUtil.checkLogin();
return true;
- /*Object tmp = request.getSession().getAttribute(AdminConstants.HAS_LOGIN);
- log.info("tmp : {}", JSON.toJSONString(tmp));
- if (tmp != null) {
- String isLogin = tmp.toString();
- if (!BlankUtil.isBlank(isLogin) && Boolean.TRUE.toString().equalsIgnoreCase(isLogin)) {
- String adminId = request.getSession().getAttribute(AdminConstants.ADMIN_ID).toString();
- if (!BlankUtil.isBlank(adminId)) {
- String sessionId = jedisService.hget(RedisKey.httpsession_store.getKey(), adminId);
- if (StringUtils.isNotEmpty(sessionId) && sessionId.equals(request.getSession().getId())) {
- return true;
- }
- }
- }
- }*/
} catch (Exception e) {
- logger.warn("getAdminId fail,admin has not login", e);
+ log.error("getAdminId fail, admin has not login, message : {}", e.getMessage());
}
reDirect(request, response);
return false;
diff --git a/accompany-dependencies/pom.xml b/accompany-dependencies/pom.xml
index 9152b62ca..6a1a678b7 100644
--- a/accompany-dependencies/pom.xml
+++ b/accompany-dependencies/pom.xml
@@ -101,6 +101,7 @@
3.2.0
1.20
1.37.0
+ 1.34.0
2.5.1