1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240
|
@Component public class UserValidationHandler extends AbstractHandler {
@Autowired private UserService userService;
@Autowired private RedisTemplate<String, Object> redisTemplate;
private final String USER_CACHE_PREFIX = "user_cache:";
public UserValidationHandler() { super("用户验证处理器", 1); }
@Override protected boolean doHandle(Request request, Response response) { try { Long userId = request.getUserId(); if (userId == null) { response.addError("用户ID不能为空"); return false; }
User user = getUserFromCache(userId); if (user == null) { user = userService.findById(userId); if (user == null) { response.addError("用户不存在"); return false; }
cacheUser(user); }
if (user.getStatus() != UserStatus.ACTIVE) { response.addError("用户状态异常"); return false; }
request.setUser(user);
log.info("用户验证成功: {}", userId); return true;
} catch (Exception e) { log.error("用户验证失败", e); return false; } }
private User getUserFromCache(Long userId) { try { String cacheKey = USER_CACHE_PREFIX + userId; return (User) redisTemplate.opsForValue().get(cacheKey); } catch (Exception e) { log.error("从缓存获取用户信息失败", e); return null; } }
private void cacheUser(User user) { try { String cacheKey = USER_CACHE_PREFIX + user.getId(); redisTemplate.opsForValue().set(cacheKey, user, Duration.ofHours(1)); } catch (Exception e) { log.error("缓存用户信息失败", e); } } }
@Component public class PermissionValidationHandler extends AbstractHandler {
@Autowired private PermissionService permissionService;
@Autowired private RedisTemplate<String, Object> redisTemplate;
private final String PERMISSION_CACHE_PREFIX = "permission_cache:";
public PermissionValidationHandler() { super("权限验证处理器", 2); }
@Override protected boolean doHandle(Request request, Response response) { try { User user = request.getUser(); String permission = request.getPermission();
if (user == null) { response.addError("用户信息不能为空"); return false; }
if (permission == null || permission.trim().isEmpty()) { response.addError("权限不能为空"); return false; }
Boolean hasPermission = getPermissionFromCache(user.getId(), permission); if (hasPermission == null) { hasPermission = permissionService.checkPermission(user.getId(), permission);
cachePermission(user.getId(), permission, hasPermission); }
if (!hasPermission) { response.addError("权限不足"); return false; }
log.info("权限验证成功: 用户={}, 权限={}", user.getId(), permission); return true;
} catch (Exception e) { log.error("权限验证失败", e); return false; } }
private Boolean getPermissionFromCache(Long userId, String permission) { try { String cacheKey = PERMISSION_CACHE_PREFIX + userId + ":" + permission; return (Boolean) redisTemplate.opsForValue().get(cacheKey); } catch (Exception e) { log.error("从缓存获取权限信息失败", e); return null; } }
private void cachePermission(Long userId, String permission, Boolean hasPermission) { try { String cacheKey = PERMISSION_CACHE_PREFIX + userId + ":" + permission; redisTemplate.opsForValue().set(cacheKey, hasPermission, Duration.ofMinutes(30)); } catch (Exception e) { log.error("缓存权限信息失败", e); } } }
@Component public class BusinessProcessHandler extends AbstractHandler {
@Autowired private BusinessService businessService;
@Autowired private RabbitTemplate rabbitTemplate;
public BusinessProcessHandler() { super("业务处理处理器", 3); }
@Override protected boolean doHandle(Request request, Response response) { try { BusinessData businessData = request.getBusinessData(); if (businessData == null) { response.addError("业务数据不能为空"); return false; }
BusinessResult result = businessService.processBusiness(businessData);
if (!result.isSuccess()) { response.addError("业务处理失败: " + result.getErrorMessage()); return false; }
response.setBusinessResult(result);
sendBusinessEvent(result);
log.info("业务处理成功: {}", businessData.getId()); return true;
} catch (Exception e) { log.error("业务处理失败", e); return false; } }
private void sendBusinessEvent(BusinessResult result) { try { BusinessEvent event = new BusinessEvent(); event.setBusinessId(result.getBusinessId()); event.setEventType("BUSINESS_PROCESSED"); event.setEventData(result); event.setEventTime(LocalDateTime.now());
rabbitTemplate.convertAndSend("business.event.queue", event);
} catch (Exception e) { log.error("发送业务事件失败", e); } } }
|