Browse Source

1. 群众端限制人脸认证有效期为8小时

2. 群众端调整短信有效期为10分钟
3. 增加按钮注解权限的校验
master
wxc 2 years ago
parent
commit
b956084da4
  1. 3
      flow.json
  2. 9
      mailbox-lan/src/main/java/com/biutag/lan/config/AdminInterceptor.java
  3. 2
      mailbox-lan/src/main/java/com/biutag/lan/config/stp/StpInterConfig.java
  4. 3
      mailbox-lan/src/main/java/com/biutag/lan/ws/WsController.java
  5. 22
      mailbox-outer/src/main/java/com/biutag/outer/controller/AuthController.java
  6. 38
      mailbox-outer/src/main/java/com/biutag/outer/domain/bo/AuthUser.java
  7. 3
      mailbox-outer/src/main/java/com/biutag/outer/service/UserService.java
  8. 4
      mailbox-outer/src/main/java/com/biutag/outer/util/CodeUtil.java
  9. 9
      mailbox-outer/src/main/java/com/biutag/outer/util/TokenUtil.java
  10. 7
      mailbox-outer/src/main/java/com/biutag/outer/util/UserHelper.java
  11. 15
      mailbox-outer/src/test/java/com/biutag/outer/DurationTest.java
  12. 1
      truncate.sql

3
flow.json

@ -1,3 +0,0 @@
{
"base64": "data:image/jpg;base64,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UgUHkkZJ9zUd3aC8tjbSsRnGWHXjmp3jLQmJWK8YDDqKBElZ13/x+2f++3/oBq7DG0USxs5cqMbm6n61TuLKWe4SdZ2TyySoABHIwetAEt0jOY1SQRtuyM4JPB6A96htpplu5LKZ/M2qHViADg9jjAqa4tROY33bZI+VbAOMjB4PFLb2vkyNM7mSR8AsQBwOgwKAIF/5Crf9ch/OtGs4WMwuzdee2SMbdoxj0rRoBkNxEs0DxMA2R0IyM9uDXLsbOMOY4ogXKgx+XvAIXJHBGDnPeuqliSdPLkGVPUetVLiz3pHHbhVCkk/TaR/WgaMOzkkDRoPNjYkA4SIKMjPHBPSukueLd8+lUIrKeO5ViVMfB9wQuK1HRZEKOMg8GiQluUkvLFYl/fRZCj+IelP08g2cbKchgW49zmpxbwKAoReOOgqUAKMKMCm2IpSTXi3scUcQaAqS755B7CrtVXtne6S4EzqqjBjH3T7mrVIZVvYGurWSBTgsOKxb6W5eK2haIxsJYwScckH+HB6fWuikQSIyEkbhjI61RgsPLMZmlaXyvubgOO2eOtCAWSGWS4cw3Hl/KoIUAkdcZznj8Kz0e5uRBfhd7ws8bqOM84yM/StF7JvOee3kMTSY34AOcdOtMbTlEEcMMjRmJtwYc5POc565zQhlCOVpNTnkmXYiwjcp6456+9QN9ritEMvz2bEEj+NVzxz0I/WtyK0SNX8w72l++x79qhNg7L5LzM0XTZgdPTPWmFzRGMcUUUUiT//R7GiiiszMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/0uxooorMzCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/9k="
}

9
mailbox-lan/src/main/java/com/biutag/lan/config/AdminInterceptor.java

@ -1,5 +1,6 @@
package com.biutag.lan.config;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.stp.StpUtil;
import com.alibaba.fastjson2.JSON;
import com.biutag.aop.NotLogin;
@ -159,6 +160,14 @@ public class AdminInterceptor implements HandlerInterceptor {
if (StringUtils.isNotNull(method) && method.isAnnotationPresent(NotPower.class)) {
break;
}
if (StringUtils.isNotNull(method) && method.isAnnotationPresent(SaCheckPermission.class)) {
String[] auths = method.getAnnotation(SaCheckPermission.class).value();
for (String auth : auths) {
// 校验权限
StpUtil.checkPermission(auth);
}
break;
}
// 路由转权限
String prefix = "/api/";
String route = uri.replaceFirst(prefix, "");

2
mailbox-lan/src/main/java/com/biutag/lan/config/stp/StpInterConfig.java

@ -39,11 +39,9 @@ public class StpInterConfig implements StpInterface {
public List<String> getPermissionList(Object loginId, String loginType) {
List<Integer> roleIds = AdminThreadLocal.getRoleIds();
List<String> perms = new LinkedList<>();
if (roleIds.isEmpty()) {
return perms;
}
List<Perm> permList = PermMapper.selectList(
new QueryWrapper<Perm>()
.select("id,role_id,menu_id")

3
mailbox-lan/src/main/java/com/biutag/lan/ws/WsController.java

@ -14,9 +14,10 @@ import org.springframework.stereotype.Controller;
public class WsController {
@MessageMapping("/con")
public void con(JSONObject message) {
public AjaxResult<Void> con(JSONObject message) {
System.out.println("con");
System.out.println(message.toJSONString());
return AjaxResult.success();
}
}

22
mailbox-outer/src/main/java/com/biutag/outer/controller/AuthController.java

@ -5,8 +5,10 @@ import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.biutag.core.AjaxResult;
import com.biutag.enums.ErrorEnum;
import com.biutag.exception.AuthException;
import com.biutag.outer.domain.User;
import com.biutag.outer.domain.bo.AuthUser;
import com.biutag.outer.domain.bo.FaceAuthBo;
import com.biutag.outer.service.FaceAuthService;
import com.biutag.outer.service.UserService;
@ -14,7 +16,6 @@ import com.biutag.outer.util.TokenUtil;
import com.biutag.outer.util.UserHelper;
import com.biutag.outer.util.Weixin;
import com.biutag.outer.util.Weixin2;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
@ -48,30 +49,35 @@ public class AuthController {
user.setCreateTime(LocalDateTime.now());
userService.save(user);
}
return AjaxResult.success(JSONObject.of("token", TokenUtil.set(user), "user", user));
return AjaxResult.success(JSONObject.of("token", TokenUtil.set(AuthUser.of(user)), "user", user));
}
@PostMapping("openid")
public AjaxResult<JSONObject> openid(@RequestParam String openid) {
User user = userService.getByOpenid(openid);
return AjaxResult.success(JSONObject.of("token", TokenUtil.set(user), "user", user));
AuthUser authUser = AuthUser.of(user);
return AjaxResult.success(JSONObject.of("token", TokenUtil.set(authUser), "user", authUser));
}
@GetMapping("user")
public AjaxResult<User> user() {
public AjaxResult<AuthUser> user() {
return AjaxResult.success(UserHelper.getCurrentUser());
}
@GetMapping("realUser")
public AjaxResult<User> realUser(@RequestParam Integer userId) {
public AjaxResult<AuthUser> realUser(@RequestParam Integer userId) {
log.info("请求 realUser: {}", userId);
User user = userService.getById(userId);
if (user != null && StrUtil.isNotBlank(user.getIdCard())) {
if (user == null) {
return new AjaxResult<>(ErrorEnum.SUCCESS.getCode(), ErrorEnum.SUCCESS.getMsg());
}
AuthUser authUser = AuthUser.of(user);
if (StrUtil.isNotBlank(user.getIdCard())) {
log.info("用户信息:{}", JSON.toJSONString(user));
// 更新用户信息
UserHelper.update(user);
UserHelper.update(authUser);
}
return AjaxResult.success(user);
return AjaxResult.success(authUser);
}
@GetMapping("wx/sign")

38
mailbox-outer/src/main/java/com/biutag/outer/domain/bo/AuthUser.java

@ -0,0 +1,38 @@
package com.biutag.outer.domain.bo;
import cn.hutool.core.util.StrUtil;
import com.biutag.outer.domain.User;
import lombok.Getter;
import lombok.Setter;
import org.springframework.beans.BeanUtils;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.Objects;
@Setter
@Getter
public class AuthUser {
private Integer id;
private String openid;
private String phone;
private String realName;
private String idCard;
private Boolean faceAuth = false;
public static AuthUser of(User user) {
AuthUser authUser = new AuthUser();
BeanUtils.copyProperties(user, authUser);
if (StrUtil.isNotBlank(user.getIdCard()) && Objects.nonNull(user.getFaceAuthTime())) {
// 8小时
authUser.setFaceAuth(Duration.between(user.getFaceAuthTime(), LocalDateTime.now()).toHours() < 8);
}
return authUser;
}
}

3
mailbox-outer/src/main/java/com/biutag/outer/service/UserService.java

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.biutag.outer.domain.User;
import com.biutag.outer.domain.bo.AuthUser;
import com.biutag.outer.mapper.UserMapper;
import com.biutag.outer.util.UserHelper;
import org.springframework.stereotype.Service;
@ -17,7 +18,7 @@ public class UserService extends ServiceImpl<UserMapper, User> {
}
public boolean updatePhoneByCurrent(String phone) {
User currentUser = UserHelper.getCurrentUser();
AuthUser currentUser = UserHelper.getCurrentUser();
boolean updated = update(new LambdaUpdateWrapper<User>().eq(User::getId, currentUser.getId()).set(User::getPhone, phone));
if (updated) {
currentUser.setPhone(phone);

4
mailbox-outer/src/main/java/com/biutag/outer/util/CodeUtil.java

@ -9,12 +9,10 @@ import java.util.concurrent.TimeUnit;
public class CodeUtil {
private static final Cache<String, String> cache = Caffeine.newBuilder()
.expireAfterWrite(5, TimeUnit.MINUTES) // 设置写入后过期时间
.expireAfterWrite(10, TimeUnit.MINUTES) // 设置写入后过期时间
.maximumSize(1000) // 最多1000人
.build();
public static String set(String code) {
String key = IdUtil.fastSimpleUUID();
cache.put(key, code);

9
mailbox-outer/src/main/java/com/biutag/outer/util/TokenUtil.java

@ -2,6 +2,7 @@ package com.biutag.outer.util;
import cn.hutool.core.util.IdUtil;
import com.biutag.outer.domain.User;
import com.biutag.outer.domain.bo.AuthUser;
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import org.springframework.util.Assert;
@ -9,23 +10,23 @@ import org.springframework.util.Assert;
import java.util.concurrent.TimeUnit;
public class TokenUtil {
private static final Cache<String, User> cache = Caffeine.newBuilder()
private static final Cache<String, AuthUser> cache = Caffeine.newBuilder()
.expireAfterWrite(60, TimeUnit.MINUTES) // 设置写入后过期时间
.maximumSize(1000) // 最多1000人
.build();
public static String set(User user) {
public static String set(AuthUser user) {
Assert.notNull(user, "未找到该用户");
String key = IdUtil.fastSimpleUUID();
cache.put(key, user);
return key;
}
public static User update(String key, User user) {
public static AuthUser update(String key, AuthUser user) {
cache.put(key, user);
return user;
}
public static User get(String key) {
public static AuthUser get(String key) {
return cache.getIfPresent(key);
}

7
mailbox-outer/src/main/java/com/biutag/outer/util/UserHelper.java

@ -2,24 +2,25 @@ package com.biutag.outer.util;
import com.biutag.exception.AuthException;
import com.biutag.outer.domain.User;
import com.biutag.outer.domain.bo.AuthUser;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
public class UserHelper {
public static User getCurrentUser() {
public static AuthUser getCurrentUser() {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
// 获取请求头的值
String authorization = request.getHeader("Authorization");
User user = TokenUtil.get(authorization);
AuthUser user = TokenUtil.get(authorization);
if (user == null) {
throw new AuthException();
}
return user;
}
public static User update(User user) {
public static AuthUser update(AuthUser user) {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
// 获取请求头的值
String authorization = request.getHeader("Authorization");

15
mailbox-outer/src/test/java/com/biutag/outer/DurationTest.java

@ -0,0 +1,15 @@
package com.biutag.outer;
import org.junit.jupiter.api.Test;
import java.time.Duration;
import java.time.LocalDateTime;
public class DurationTest {
@Test
public void testBetween() {
System.out.println(Duration.between(LocalDateTime.of(2024, 3, 8, 7, 0, 0, 0), LocalDateTime.now()).toHours());
System.out.println(Duration.between(LocalDateTime.of(2024, 3, 8, 16, 0, 0, 0), LocalDateTime.now()).toHours() < 8);
}
}

1
truncate.sql

@ -12,6 +12,7 @@ truncate table mail_mark;
truncate table work;
truncate table favorite;
truncate table notice;
truncate table system_log_operate;
truncate table system_log_login;

Loading…
Cancel
Save