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