이번 글에서는 이메일 등록 기능을 구현하기 위한 Spring Boot의 샘플 코드를 주로 소개하고 있는데, 편집자가 보기엔 꽤 괜찮다고 해서 지금부터 공유하고 참고용으로 올려보겠습니다. 편집자를 따라가서 살펴보겠습니다
등록 절차
1. [프런트엔드] 사용자는 등록 페이지에서 등록 정보를 제출합니다.
2.[백엔드] 사용자가 제출한 매개변수를 확인하고, 오류가 있으면 바로 오류 메시지를 반환하고, 오류가 없으면 실행합니다.
3.[백엔드] ID를 무작위로 생성하고 ID를 키로, 사용자 정보를 값으로 사용하여 redis에 저장하고 설정
4.[백엔드] 활성화 링크를 생성하고 이메일 시스템을 통해 사용자의 메일함으로 이메일을 보냅니다.
5.[프런트엔드] 위 그림에서 사용자가 "등록 확인"을 클릭합니다.
6.[백엔드] 끝] 값이 만료되었는지 확인하고, 이메일 주소가 등록되었는지 확인합니다.
함수 구현(역분석)
먼저 구현을 살펴보겠습니다. 메일 보내기 cn.ictgu.tools.mail.MailService
package cn.ictgu.tools.mail; import cn.ictgu.dao.model.User; import com.alibaba.fastjson.JSONObject; import lombok.extern.log4j.Log4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Service; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; /** * 邮件服务 * Created by Silence on 2017/3/11. */ @Service @Log4j public class MailService { @Autowired private JavaMailSender mailSender; @Value("${spring.mail.username}") private String from; private static final String TITLE_SIGN_UP = "[邮件标题]"; private static final String CONTENT = "[邮件内容]"; public void userValidate(User user, String token){ MimeMessage mailMessage = mailSender.createMimeMessage(); try { MimeMessageHelper helper = new MimeMessageHelper(mailMessage, true, "GBK"); helper.setFrom(from); helper.setTo(user.getEmail()); helper.setSubject(TITLE_SIGN_UP); String link = "http://www.ictgu.cn/validate/" + token; String message = String.format(CONTENT, user.getNickname(), link, link, user.getEmail()); helper.setText(message, true); mailSender.send(mailMessage); } catch (MessagingException e) { log.error("发送邮件失败:User:" + JSONObject.toJSONString(user) + ", Token: " + token); } }
설명: 이메일을 보내려면 user 및 token 2가지 매개변수를 전달해야 하며, 사용자는 에 대한 정보를 등록해야 합니다. > user. 토큰은 임의의 UUID입니다. redis에 해당 키가 있으며 해당 값은 사용자의 json 문자열 입니다. (핵심 규칙은 구성 파일 redis.prefix.signUp + UUID입니다)
이메일 템플릿 문제:
이메일 내용 문자열이며 스타일은 html+css로 제어합니다. 개발 시 메일함에서 템플릿을 디자인하고 변수 를 %s로 바꾼 후 전체 문자열을 적절한 위치에 저장합니다. 이메일을 보낼 때 String.format() 메소드를 사용하여 %s를 실제 값으로 대체하여 최종 사용자가 볼 수 있는 이메일을 생성합니다. 따라서 타사 템플릿을 사용할 필요가 없습니다. jar 패키지를 추가하면 동일한 기능이 최대한 단순화될 수 있습니다.
2. 토큰은 어떻게 생성하나요? cn.ictgu.redis.RedisTokenManager
public String getTokenOfSignUp(User user){ String token = UUID.randomUUID().toString(); String value = JSONObject.toJSONString(user); stringRedisTemplate.opsForValue().set(signUpPrefix + token, value); stringRedisTemplate.expire(signUpPrefix + token, 12, TimeUnit.HOURS); return token; }
를 참조하세요. 설명: UUID.randomUUID().toString()은 기본 키를 자동으로 생성하기 위해 javaJDK에서 제공하는 메서드입니다. UUID(Universally Unique Identifier) 전역 고유 식별자는 하나의 머신에서 생성된 번호를 말하며, 이는 동일한 시간과 공간의 모든 머신에서 유효함을 보장합니다. 유일한 것은 16자리 숫자로 구성된 형태이다. 다음 부분의 조합입니다: 현재 날짜 및 시간(UUID의 첫 번째 부분은 시간과 관련되어 있으며, 몇 초 후에 UUID를 생성하면 첫 번째 부분이 다르고 나머지 부분은 동일함), 전역적으로 고유한 IEEE 기계 식별 번호인 clock Sequence(네트워크 카드가 있으면 네트워크 카드에서 가져오고, 네트워크 카드가 없으면 다른 방법으로 가져옵니다.) UUID의 유일한 결함은 생성된다는 것입니다. 결과 문자열은 상대적으로 길어집니다.
3. 토큰이 있으면 서비스 계층에서 사용자와 토큰을 연결하여 이메일을 보내야 합니다. cn.ictgu.dao.service.UserService
public boolean signUp(User user){ String email = user.getEmail(); if (existEmail(email)){ log.error("用户注册,邮箱已注册:" + email); return false; } sendValidateEmail(user); return true; } @Async private void sendValidateEmail(User user){ String token = tokenManager.getTokenOfSignUp(user); log.error("用户注册,准备发送邮件:User:" + JSONObject.toJSONString(user) + ", Token: " + token); mailService.userValidate(user, token); } private boolean existEmail(String email){ return mapper.selectByEmail(email) != null; }
참고: 이메일을 보내는 데 시간이 오래 걸립니다. 사용자 경험을 개선하려면 비동기 처리를 사용하세요
4. 사용자는 간단합니다
rree설명: 이 레이어는 주로 사용자 등록 매개변수를 확인합니다
렌더링
리뷰
아래에서 위로 사용자 등록부터 이메일 전송이 이루어지더라도 사용자 행동 을 신뢰할 수 없기 때문에 대부분의 코드는 매개변수 확인에 사용됩니다. 안전한 백엔드 시스템을 구축하려면 사각지대 없이 확인해야 합니다. . . .
【관련 추천】
위 내용은 Java에서 이메일 등록 기능을 완성하는 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

java实现定时任务Jdk自带的库中,有两种方式可以实现定时任务,一种是Timer,另一种是ScheduledThreadPoolExecutor。Timer+TimerTask创建一个Timer就创建了一个线程,可以用来调度TimerTask任务Timer有四个构造方法,可以指定Timer线程的名字以及是否设置为为守护线程。默认名字Timer-编号,默认不是守护线程。主要有三个比较重要的方法:cancel():终止任务调度,取消当前调度的所有任务,正在运行的任务不受影响purge():从任务队

一、@RequestParam注解对应的axios传参方法以下面的这段Springjava代码为例,接口使用POST协议,需要接受的参数分别是tsCode、indexCols、table。针对这个Spring的HTTP接口,axios该如何传参?有几种方法?我们来一一介绍。@PostMapping("/line")publicList

SpringBoot和SpringCloud都是SpringFramework的扩展,它们可以帮助开发人员更快地构建和部署微服务应用程序,但它们各自有不同的用途和功能。SpringBoot是一个快速构建Java应用的框架,使得开发人员可以更快地创建和部署基于Spring的应用程序。它提供了一个简单、易于理解的方式来构建独立的、可执行的Spring应用

随着技术的更新迭代,Java5.0开始支持注解。而作为java中的领军框架spring,自从更新了2.5版本之后也开始慢慢舍弃xml配置,更多使用注解来控制spring框架。

作为一名Java开发者,学习和使用Spring框架已经是一项必不可少的技能。而随着云计算和微服务的盛行,学习和使用SpringCloud成为了另一个必须要掌握的技能。SpringCloud是一个基于SpringBoot的用于快速构建分布式系统的开发工具集。它为开发者提供了一系列的组件,包括服务注册与发现、配置中心、负载均衡和断路器等,使得开发者在构建微

1.Spring项目的创建1.1创建Maven项目第一步,创建Maven项目,Spring也是基于Maven的。1.2添加spring依赖第二步,在Maven项目中添加Spring的支持(spring-context,spring-beans)在pom.xml文件添加依赖项。org.springframeworkspring-context5.2.3.RELEASEorg.springframeworkspring-beans5.2.3.RELEASE刷新等待加载完成。1.3创建启动类第三步,创

spring设计模式有:1、依赖注入和控制反转;2、工厂模式;3、模板模式;4、观察者模式;5、装饰者模式;6、单例模式;7、策略模式和适配器模式等。详细介绍:1、依赖注入和控制反转: 这两个设计模式是Spring框架的核心。通过依赖注入,Spring负责管理和注入组件之间的依赖关系,降低了组件之间的耦合度。控制反转则是指将对象的创建和依赖关系的管理交给Spring容器等等。

SpringBean的生命周期管理一、SpringBean的生命周期通过以下方式来指定Bean的初始化和销毁方法,当Bean为单例时,Bean归Spring容器管理,Spring容器关闭,就会调用Bean的销毁方法当Bean为多例时,Bean不归Spring容器管理,Spring容器关闭,不会调用Bean的销毁方法二、通过@Bean的参数(initMethod,destroyMethod)指定Bean的初始化和销毁方法1、项目结构2、PersonpublicclassPerson{publicP


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

뜨거운 주제



