feat:设备授权问题
This commit is contained in:
1 parent
2332dfba38
commit
8422ed1d4b
6 files changed
+82
-31
No files matched your search
+10
@@ -15,4 +15,14 @@ public class ThirdIsVerifyDeviceTo {
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 唯一值,小程序是openId
|
||||
*/
|
||||
private String uniqueCode;
|
||||
|
||||
/**
|
||||
* 设备信息
|
||||
*/
|
||||
private String deviceJson;
|
||||
|
||||
}
|
||||
+39
-4
@@ -34,6 +34,7 @@ import org.springframework.data.redis.core.StringRedisTemplate;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.DigestUtils;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
@@ -47,6 +48,9 @@ import java.util.concurrent.TimeUnit;
|
||||
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
|
||||
public class ThirdPartyOAth2Cotroller {
|
||||
|
||||
static final String MINI_MAP_APP_DEVICE_NAME = "微信小程序设备认证";
|
||||
static final String SH_DEVICE_NAME = "诗画设备认证";
|
||||
|
||||
private final ThirdPartyOAuth2Service thirdPartyOAuth2Service;
|
||||
|
||||
private final RemoteUserService remoteUserService;
|
||||
@@ -222,7 +226,7 @@ public class ThirdPartyOAth2Cotroller {
|
||||
SysUser sysUser = sysUserList.get(0);
|
||||
//判断当前用户设备是否信任
|
||||
String md5 = DeviceFingerprintUtil.generate(httpServletRequest);
|
||||
R<UserTrustedDeviceEntity> userTrustedDeviceR = remoteUserTrustedDeviceService.getUserTrustedDeviceByIdAndMD5(sysUser.getPhone(), md5);
|
||||
R<UserTrustedDeviceEntity> userTrustedDeviceR = remoteUserTrustedDeviceService.getUserTrustedDeviceByIdAndMD5(sysUser.getPhone(), md5, SH_DEVICE_NAME);
|
||||
UserTrustedDeviceEntity userTrustedDevice = userTrustedDeviceR.getData();
|
||||
if (userTrustedDevice == null || userTrustedDevice.getExpireTime().isBefore(LocalDateTime.now())) {
|
||||
return R.failed(-1, "请先信任设备");
|
||||
@@ -295,7 +299,7 @@ public class ThirdPartyOAth2Cotroller {
|
||||
// 2. 记录信任设备
|
||||
//查询之前的是否有过期的数据,有就更新
|
||||
String generate = DeviceFingerprintUtil.generate(httpServletRequest);
|
||||
R<UserTrustedDeviceEntity> userTrustedDeviceR = remoteUserTrustedDeviceService.getUserTrustedDeviceByIdAndMD5(dto.getMobilePhone(), generate);
|
||||
R<UserTrustedDeviceEntity> userTrustedDeviceR = remoteUserTrustedDeviceService.getUserTrustedDeviceByIdAndMD5(dto.getMobilePhone(), generate, SH_DEVICE_NAME);
|
||||
if (userTrustedDeviceR.getData() != null) {
|
||||
userTrustedDeviceR.getData().setExpireTime(LocalDateTime.now().plusMonths(3));
|
||||
remoteUserTrustedDeviceService.updateById(userTrustedDeviceR.getData());
|
||||
@@ -303,7 +307,38 @@ public class ThirdPartyOAth2Cotroller {
|
||||
UserTrustedDeviceEntity userTrustedDevice = new UserTrustedDeviceEntity();
|
||||
userTrustedDevice.setMobilePhone(dto.getMobilePhone());
|
||||
userTrustedDevice.setExpireTime(LocalDateTime.now().plusMonths(3));
|
||||
userTrustedDevice.setDeviceName("诗画设备认证");
|
||||
userTrustedDevice.setDeviceName(SH_DEVICE_NAME);
|
||||
userTrustedDevice.setDeviceFingerprint(generate);
|
||||
remoteUserTrustedDeviceService.save(userTrustedDevice);
|
||||
}
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/mini-app/verify-device")
|
||||
@SysLog("小程序设备验证")
|
||||
@Inner(value = false)
|
||||
public R miniVerifyDevice(@RequestBody DeviceVerifyDTO dto, HttpServletRequest httpServletRequest) {
|
||||
|
||||
// 1. 校验验证码
|
||||
String redisKey = "smsCode_" + dto.getMobilePhone();
|
||||
String storedCode = (String) redisTemplate.opsForValue().get(redisKey);
|
||||
if (!dto.getCode().equals(storedCode)) {
|
||||
return R.failed("验证码错误");
|
||||
}
|
||||
// 验证成功后移除验证码(可选)
|
||||
redisTemplate.delete(redisKey);
|
||||
// 2. 记录信任设备
|
||||
//查询之前的是否有过期的数据,有就更新
|
||||
String generate = DeviceFingerprintUtil.generate(httpServletRequest);
|
||||
R<UserTrustedDeviceEntity> userTrustedDeviceR = remoteUserTrustedDeviceService.getUserTrustedDeviceByIdAndMD5(dto.getMobilePhone(), generate, MINI_MAP_APP_DEVICE_NAME);
|
||||
if (userTrustedDeviceR.getData() != null) {
|
||||
userTrustedDeviceR.getData().setExpireTime(LocalDateTime.now().plusMonths(3));
|
||||
remoteUserTrustedDeviceService.updateById(userTrustedDeviceR.getData());
|
||||
} else {
|
||||
UserTrustedDeviceEntity userTrustedDevice = new UserTrustedDeviceEntity();
|
||||
userTrustedDevice.setMobilePhone(dto.getMobilePhone());
|
||||
userTrustedDevice.setExpireTime(LocalDateTime.now().plusMonths(3));
|
||||
userTrustedDevice.setDeviceName(MINI_MAP_APP_DEVICE_NAME);
|
||||
userTrustedDevice.setDeviceFingerprint(generate);
|
||||
remoteUserTrustedDeviceService.save(userTrustedDevice);
|
||||
}
|
||||
@@ -324,7 +359,7 @@ public class ThirdPartyOAth2Cotroller {
|
||||
}
|
||||
}
|
||||
String generate = DeviceFingerprintUtil.generate(httpServletRequest);
|
||||
UserTrustedDeviceEntity userTrustedDevice = remoteUserTrustedDeviceService.getUserTrustedDeviceByIdAndMD5(body.getMobile(), generate).getData();
|
||||
UserTrustedDeviceEntity userTrustedDevice = remoteUserTrustedDeviceService.getUserTrustedDeviceByIdAndMD5(body.getMobile(), generate, MINI_MAP_APP_DEVICE_NAME).getData();
|
||||
return R.ok(ObjectUtil.isNotEmpty(userTrustedDevice));
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -48,8 +48,8 @@ public interface RemoteUserTrustedDeviceService {
|
||||
|
||||
|
||||
@NoToken
|
||||
@GetMapping("/userTrustedDevice/getUserTrustedDeviceByIdAndMD5" )
|
||||
R<UserTrustedDeviceEntity> getUserTrustedDeviceByIdAndMD5(@RequestParam("mobilePhone")String mobilePhone,@RequestParam("md5") String md5);
|
||||
@GetMapping("/userTrustedDevice/getUserTrustedDeviceByIdAndMD5")
|
||||
R<UserTrustedDeviceEntity> getUserTrustedDeviceByIdAndMD5(@RequestParam("mobilePhone") String mobilePhone, @RequestParam("md5") String md5, @RequestParam("deviceName") String deviceName);
|
||||
|
||||
|
||||
@PostMapping("/userTrustedDevice/save")
|
||||
|
||||
+26
-22
@@ -30,22 +30,23 @@ import java.util.List;
|
||||
*/
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@RequestMapping("/userTrustedDevice" )
|
||||
@Tag(description = "userTrustedDevice" , name = "设备指纹管理" )
|
||||
@RequestMapping("/userTrustedDevice")
|
||||
@Tag(description = "userTrustedDevice", name = "设备指纹管理")
|
||||
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
|
||||
public class UserTrustedDeviceController {
|
||||
|
||||
private final UserTrustedDeviceService userTrustedDeviceService;
|
||||
private final UserTrustedDeviceService userTrustedDeviceService;
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
* @param page 分页对象
|
||||
*
|
||||
* @param page 分页对象
|
||||
* @param userTrustedDevice 设备指纹
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "分页查询" , description = "分页查询" )
|
||||
@GetMapping("/page" )
|
||||
@PreAuthorize("@pms.hasPermission('admin_userTrustedDevice_view')" )
|
||||
@Operation(summary = "分页查询", description = "分页查询")
|
||||
@GetMapping("/page")
|
||||
@PreAuthorize("@pms.hasPermission('admin_userTrustedDevice_view')")
|
||||
public R getUserTrustedDevicePage(@ParameterObject Page page, @ParameterObject UserTrustedDeviceEntity userTrustedDevice) {
|
||||
LambdaQueryWrapper<UserTrustedDeviceEntity> wrapper = Wrappers.lambdaQuery();
|
||||
return R.ok(userTrustedDeviceService.page(page, wrapper));
|
||||
@@ -54,22 +55,24 @@ public class UserTrustedDeviceController {
|
||||
|
||||
/**
|
||||
* 通过id查询设备指纹
|
||||
*
|
||||
* @param id id
|
||||
* @return R
|
||||
*/
|
||||
@Operation(summary = "通过id查询" , description = "通过id查询" )
|
||||
@GetMapping("/{id}" )
|
||||
@PreAuthorize("@pms.hasPermission('admin_userTrustedDevice_view')" )
|
||||
public R getById(@PathVariable("id" ) Long id) {
|
||||
@Operation(summary = "通过id查询", description = "通过id查询")
|
||||
@GetMapping("/{id}")
|
||||
@PreAuthorize("@pms.hasPermission('admin_userTrustedDevice_view')")
|
||||
public R getById(@PathVariable("id") Long id) {
|
||||
return R.ok(userTrustedDeviceService.getById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增设备指纹
|
||||
*
|
||||
* @param userTrustedDevice 设备指纹
|
||||
* @return R
|
||||
*/
|
||||
@Operation(summary = "新增设备指纹" , description = "新增设备指纹" )
|
||||
@Operation(summary = "新增设备指纹", description = "新增设备指纹")
|
||||
@PostMapping("/save")
|
||||
@Inner
|
||||
public R save(@RequestBody UserTrustedDeviceEntity userTrustedDevice) {
|
||||
@@ -78,11 +81,12 @@ public class UserTrustedDeviceController {
|
||||
|
||||
/**
|
||||
* 修改设备指纹
|
||||
*
|
||||
* @param userTrustedDevice 设备指纹
|
||||
* @return R
|
||||
*/
|
||||
@Operation(summary = "修改设备指纹" , description = "修改设备指纹" )
|
||||
@SysLog("修改设备指纹" )
|
||||
@Operation(summary = "修改设备指纹", description = "修改设备指纹")
|
||||
@SysLog("修改设备指纹")
|
||||
@PutMapping("/update")
|
||||
@Inner
|
||||
public R updateById(@RequestBody UserTrustedDeviceEntity userTrustedDevice) {
|
||||
@@ -91,23 +95,23 @@ public class UserTrustedDeviceController {
|
||||
|
||||
/**
|
||||
* 通过id删除设备指纹
|
||||
*
|
||||
* @param ids id列表
|
||||
* @return R
|
||||
*/
|
||||
@Operation(summary = "通过id删除设备指纹" , description = "通过id删除设备指纹" )
|
||||
@SysLog("通过id删除设备指纹" )
|
||||
@Operation(summary = "通过id删除设备指纹", description = "通过id删除设备指纹")
|
||||
@SysLog("通过id删除设备指纹")
|
||||
@DeleteMapping
|
||||
@PreAuthorize("@pms.hasPermission('admin_userTrustedDevice_del')" )
|
||||
@PreAuthorize("@pms.hasPermission('admin_userTrustedDevice_del')")
|
||||
public R removeById(@RequestBody Long[] ids) {
|
||||
return R.ok(userTrustedDeviceService.removeBatchByIds(CollUtil.toList(ids)));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Operation(summary = "通过md5和用户查询设备" , description = "通过md5和用户查询设备" )
|
||||
@GetMapping("/getUserTrustedDeviceByIdAndMD5" )
|
||||
@Operation(summary = "通过md5和用户查询设备", description = "通过md5和用户查询设备")
|
||||
@GetMapping("/getUserTrustedDeviceByIdAndMD5")
|
||||
@Inner
|
||||
public R<UserTrustedDeviceEntity> getUserTrustedDeviceByIdAndMD5(@RequestParam("mobilePhone")String mobilePhone,@RequestParam("md5") String md5) {
|
||||
return R.ok(userTrustedDeviceService.getUserTrustedDeviceByIdAndMD5(mobilePhone,md5));
|
||||
public R<UserTrustedDeviceEntity> getUserTrustedDeviceByIdAndMD5(@RequestParam("mobilePhone") String mobilePhone, @RequestParam("md5") String md5, @RequestParam("deviceName") String deviceName) {
|
||||
return R.ok(userTrustedDeviceService.getUserTrustedDeviceByIdAndMD5(mobilePhone, md5, deviceName));
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -8,12 +8,12 @@ public interface UserTrustedDeviceService extends IService<UserTrustedDeviceEnti
|
||||
|
||||
/**
|
||||
* 新增
|
||||
*
|
||||
* @param userTrustedDevice
|
||||
* @return
|
||||
*/
|
||||
Object saveUserTruste(UserTrustedDeviceEntity userTrustedDevice);
|
||||
|
||||
|
||||
|
||||
UserTrustedDeviceEntity getUserTrustedDeviceByIdAndMD5(String mobilePhone, String md5);
|
||||
UserTrustedDeviceEntity getUserTrustedDeviceByIdAndMD5(String mobilePhone, String md, String deviceName);
|
||||
}
|
||||
+3
-1
@@ -8,6 +8,7 @@ import com.bsd.pjcloud.admin.service.UserTrustedDeviceService;
|
||||
import com.bsd.pjcloud.common.core.util.DeviceFingerprintUtil;
|
||||
import com.bsd.pjcloud.common.core.util.WebUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* 设备指纹
|
||||
*
|
||||
@@ -22,10 +23,11 @@ public class UserTrustedDeviceServiceImpl extends ServiceImpl<UserTrustedDeviceM
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserTrustedDeviceEntity getUserTrustedDeviceByIdAndMD5(String mobilePhone, String md5) {
|
||||
public UserTrustedDeviceEntity getUserTrustedDeviceByIdAndMD5(String mobilePhone, String md5, String deviceName) {
|
||||
LambdaQueryWrapper<UserTrustedDeviceEntity> userTrustedDeviceEntityLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
userTrustedDeviceEntityLambdaQueryWrapper.eq(UserTrustedDeviceEntity::getMobilePhone, mobilePhone);
|
||||
userTrustedDeviceEntityLambdaQueryWrapper.eq(UserTrustedDeviceEntity::getDeviceFingerprint, md5);
|
||||
userTrustedDeviceEntityLambdaQueryWrapper.eq(UserTrustedDeviceEntity::getDeviceName, deviceName);
|
||||
return baseMapper.selectOne(userTrustedDeviceEntityLambdaQueryWrapper);
|
||||
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user