Keycloak升级至v19.0.1后EmailSenderProvider接口实现问题求助
解决Keycloak v19.0.1 EmailSenderProvider新方法实现问题
你可以将原有的邮件发送核心逻辑抽离为独立私有方法,让两个send方法复用该逻辑,既满足接口实现要求,又避免代码重复:
1. 抽离核心发送逻辑
把原send方法中拿到邮箱地址后的发送代码,移到新的私有方法中:
private void sendEmail(Map<String, String> config, String address, String subject, String textBody, String htmlBody) throws EmailException { // 这里放置你原代码中拿到address后的所有发送逻辑,比如邮件构建、调用邮件服务等 // 示例补充(根据你的现有逻辑完善): if (address == null || address.isEmpty()) { throw new EmailException("Target email address is missing"); } // 你的邮件发送具体实现代码... }
2. 调整原有带UserModel的send方法
保留原方法的用户邮箱获取逻辑,转而调用抽离的核心方法:
@Override public void send(final Map<String, String> config, final UserModel user, final String subject, final String textBody, final String htmlBody) throws EmailException { try { final String address = retrieveEmailAddress(user); sendEmail(config, address, subject, textBody, htmlBody); } catch (Exception e) { throw new EmailException("Failed to send email to user", e); } }
3. 实现新的多String参数send方法
直接传入接口提供的邮箱地址参数,调用核心发送方法即可:
@Override public void send(Map<String, String> config, String address, String subject, String textBody, String htmlBody) throws EmailException { sendEmail(config, address, subject, textBody, htmlBody); }
说明
这个新方法的设计逻辑是让调用方直接提供目标邮箱地址,无需从UserModel中获取,因此直接复用核心发送逻辑即可满足要求,同时完全符合接口实现规范,不存在空方法体问题。你的retrieveEmailAddress方法可以继续保留,用于带UserModel参数的方法中获取用户邮箱。
内容的提问来源于stack exchange,提问作者gorecode
相关产品推荐
相关产品推荐

