欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > Java中常见的问题

Java中常见的问题

2025/5/7 8:42:10 来源:https://blog.csdn.net/qq_28919337/article/details/147747710  浏览:    关键词:Java中常见的问题

1. SSO中的Cookie/Token生成与安全传递

  • 生成Cookie/Token
    • Cookie:服务器通过Set-Cookie响应头生成,包含用户ID、过期时间等,需设置HttpOnlySecure属性防止XSS和中间人攻击。
    • Token(如JWT):使用签名算法(如HMAC或RSA)生成,包含用户信息(Payload)、签名和过期时间,示例:
      String token = JWT.create().withSubject(userId).withClaim("role", "admin").sign(Algorithm.HMAC256("secret"));
      
  • 安全传递
    • Cookie使用Secure(仅HTTPS传输)和SameSite(防CSRF)。
    • Token通过HTTP Header(如Authorization: Bearer <token>)传递,避免URL暴露。
  • Session防泄露
    • 会话ID随机化,绑定客户端IP/User-Agent。
    • 使用HTTPS加密传输,服务端存储Session时加密。

2. JetCache与Redis集群

  • JetCache使用
    @Cached(name="userCache", expire=3600)
    public User getUserById(Long id) { /*...*/ }
    
  • Redis集群一致性
    • 使用RAFTRedlock算法保证数据同步。
    • 最终一致性场景:读从库,写主库。
  • 缓存无法删除
    • 检查Redis集群状态,手动执行DEL key
    • 设置缓存降级策略,如本地缓存兜底。
  • 多级缓存
    • 本地缓存(Caffeine)+ Redis缓存,通过注解@CachePenetrationProtect防穿透。

3. 动态数据源与多租户

  • 动态切换逻辑
    • 使用AbstractRoutingDataSource,通过ThreadLocal绑定租户标识:
      public class TenantDataSource extends AbstractRoutingDataSource {@Overrideprotected Object determineCurrentLookupKey() {return TenantContext.getTenantId();}
      }
      
  • 多租户隔离
    • 按租户分库(物理隔离)或分表(逻辑隔离,如tenant_id字段)。

4. 自定义组件

  • Spring Boot自定义组件
    1. 定义Bean:
    @Component
    public class CustomComponent { /*...*/ }
    
    1. 通过@ConditionalOnProperty按条件加载。
    2. 实现ApplicationRunner在启动时初始化。

5. MQ防消息丢失与死信队列

  • 防丢失
    • 生产者:开启confirm机制(RabbitMQ)或事务(Kafka)。
    • 消费者:手动ACK,消息持久化。
  • 死信队列自动化
    • 设置死信消息自动重试(如RabbitMQ的TTL+DLX)。
    • 使用定时任务扫描死信队列重新投递。

6. 代码中定位生产者/消费者

  • 查找方法
    • 生产者:搜索@RabbitListenerkafkaTemplate.send()
    • 消费者:查找@KafkaListener或消息处理类。
    • 使用IDE的“Find Usages”功能跟踪消息关键字。

7. 过滤器与分级认证

  • 过滤器链
    public class AuthFilter implements Filter {public void doFilter(request, response, chain) {if (isPublicAPI(request)) chain.doFilter();else checkToken(request); // 分级验证}
    }
    
  • 分级认证
    • 使用@PreAuthorize("hasRole('ADMIN')")(Spring Security)。

8. 双亲委派模型

  • 流程
    1. 类加载器收到请求后,先委派父类加载。
    2. 父类无法加载时,自身尝试加载。
    3. 核心类(如java.lang.*)由Bootstrap加载器加载。
  • 实现
    • 类加载器的loadClass()方法默认实现委派逻辑。

9. 打破双亲委派

  • 场景
    • Tomcat为每个WebApp单独加载类。
    • 热部署时重新加载修改后的类。
  • 方法
    • 自定义类加载器,重写loadClass()逻辑。

10. 注解作用位置选择

  • AOP:业务逻辑增强(如日志、事务)。
  • 拦截器:HTTP请求预处理(如权限校验)。
  • MVC拦截器:Controller层拦截。
  • 启动时刷新:使用@PostConstructApplicationListener

11. 安全问题示例

  • endsWith不安全
    • 可能被大小写或特殊字符绕过,如"admin".endsWith("min")误判。
  • lastIndexOf+substring安全
    int index = path.lastIndexOf("/");
    String suffix = path.substring(index); // 精确截取
    

12. 分布式追踪与日志脱敏

  • Trace ID
    • 代码中通过MDC注入:
      MDC.put("traceId", UUID.randomUUID().toString());
      
    • 日志框架(Logback)配置自动追加%X{traceId}
  • 脱敏
    • 使用正则替换敏感字段:
      <pattern>%msg|replace('password=".*?"', 'password=***')</pattern>
      

13. Token与机机调用验证

  • 动态Token(如JWT):每次生成新Token,需验签。
  • 静态Token(API Key):长期有效,需加密存储。
  • 机机调用不用Cookie
    • Cookie依赖浏览器上下文,机机调用无状态。
  • HTTPOnly作用:防止XSS窃取Cookie。
  • 跨域安全
    • CORS配置Access-Control-Allow-Origin白名单。
    • 使用OAuth2.0授权码模式。

14. Spring Security核心

  • 配置
    @Configuration
    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter {protected void configure(HttpSecurity http) {http.authorizeRequests().antMatchers("/admin/**").hasRole("ADMIN");}
    }
    

15. 时间类型与工作日计算

  • 时间类型
    • LocalDate:日期(无时间)。
    • LocalDateTime:日期+时间。
    • ZonedDateTime:带时区。
  • 工作日计算
    • 使用TemporalAdjusters跳过周末:
      LocalDate date = startDate;
      while (workDays > 0) {date = date.plusDays(1);if (date.getDayOfWeek() != SATURDAY && date.getDayOfWeek() != SUNDAY) workDays--;
      }
      
    • 集成第三方API(如阿里云节假日接口)。

16. Map分组与SQL分组的取舍

  • 代码分组优势
    • 灵活处理复杂逻辑(如多层嵌套分组)。
    • 避免SQL性能瓶颈(大数据量时)。
  • 示例
    Map<String, List<Order>> ordersByCategory = orders.stream().collect(Collectors.groupingBy(Order::getCategory));
    

以上为具体问题的解决方案,如需进一步探讨某个点,可继续提问!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词