Spring Boot 메 일 링크 등록 인증 및 등록 절차
등록 절차
【1】전단 에 등록 정 보 를 제출한다.
【2】백 엔 드 에서 데 이 터 를 받 습 니 다.
【3】백 엔 드 에 UUID 를 token 으로 생 성하 고 token 을 redis 의 key 값 으로 하 며 사용자 데 이 터 를 redis 의 value 값 으로 하고 key 의 시간 을 설정 합 니 다.
【4】백 엔 드 는 사용자 정보 중의 메 일 주소 정보 에 따라 사용자 가 이미 등 록 했 는 지 확인 합 니 다.만약 에 없 으 면 등록 링크 를 생 성하 여 사용자 메 일 로 보 냅 니 다.만약 에 등 록 된 경우 사용자 에 게 이 메 일 주소 가 이미 등록 되 었 음 을 알려 줍 니 다.
【5】사용자 가 메 일의 등록 링크 를 클릭
【6】백 엔 드 판단 redis 에서 token 이 만 료 되 었 는 지,사용자 정 보 를 데이터베이스 에 저장 하지 않 았 는 지,사용자 등록 성공 을 알 립 니 다.
프로젝트 소스 코드:https://gitee.com/residual-temperature/email-link-demo.git
메 일 효과 도
실현 과정
1.pom 파일 에 가입 할 jar 패키지
<!-- -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.application.yml 파일 에 추가 할 설정
spring:
redis:
host: # redis
port: 6379 # redis ( 6379)
password: # redis
mail:
host: smtp.qq.com #
username: #
password: #
3.실체 클래스 정의
@Repository
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
private long id;
private String account;
private String password;
private String username;
}
주의 하 다.여기에 get(),set()방법 이 없 는 것 은 lombok 가방 을 가 져 왔 기 때 문 입 니 다.
4.redis 의 config 설정
대상 의 저장 은 직렬 화 되 어야 하기 때문에 RedisTemplete 를 사용자 정의 해 야 합 니 다.
@Configuration
public class RedisConfig {
//
@Bean
@SuppressWarnings("all")
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
// <String,Object>
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
//JSON
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
//String
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//key String
template.setKeySerializer(stringRedisSerializer);
//hash String
template.setHashKeySerializer(stringRedisSerializer);
//value jackson
template.setValueSerializer(jackson2JsonRedisSerializer);
//hash Value jackson
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
5.링크 생 성과 메 일 로 보 내 는 도구 클래스 CodeUtils 설정 검증
@Component
public class CodeUtils {
@Resource
JavaMailSender mailSender;
@Resource
RedisTemplate<String, User> redisTemplate;
// ,
public boolean sendCode(User user){
MimeMessage message = mailSender.createMimeMessage();
try{
MimeMessageHelper messageHelper = new MimeMessageHelper(message);
String token = UUID.randomUUID().toString(); // UUID
redisTemplate.opsForValue().set(token,user);
redisTemplate.expire(token,300, TimeUnit.SECONDS);
messageHelper.setFrom(" "); // ,
messageHelper.setTo(user.getAddress()); //
messageHelper.setSubject(" "); //
String html = "<html>
" +
"<body>
" +
"<p> </p>
" +
"<a href=\"http://localhost:8081/lookCode/"+token+"\">http://localhost:8081/lookCode/"+token+"</a>" +
"</body>
" +
"</html>";
messageHelper.setText(html,true); //
mailSender.send(message); //
System.out.println(" ");
return true;
}catch (Exception e){
System.out.println(" ");
return false;
}
}
// token
public boolean eqToken(String token){
return redisTemplate.hasKey(token);
}
// token
public User findUser(String token){
return redisTemplate.opsForValue().get(token);
}
}
6.UserMapper 의 설정
@Mapper
@Repository
public interface UserMapper {
// sql
@Insert("insert into user(account,password,username) values (#{account},#{password},#{username})")
public int addUser(User user);
}
7.UserService 설정
public interface UserService {
//
public boolean adduser(User user);
//
public boolean sendCode(User user);
// token
public boolean eqToken(String token);
}
8.UserService 의 실현 클래스 UserServiceImpl 의 설정
@Service
public class UserServiceImpl implements UserService {
@Resource
UserMapper userMapper;
@Resource
CodeUtils codeUtils;
/**
*
* @param user
* @return
*/
@Override
public boolean adduser(User user) {
return userMapper.addUser(user) > 0;
}
/**
*
* @param address
* @param user
*/
@Override
public boolean sendCode(User user) {
if ( codeUtils.sendCode(user)) //
return true;
else
return false;
}
/**
* token
* @param token token
* @return
*/
@Override
public boolean eqToken(String token) {
boolean flag = codeUtils.eqToken(token);
if (flag){
User user = codeUtils.findUser(token);
adduser(user);
return true;
}else {
return false;
}
}
}
9.UserController 의 설정
@RestController
public class UserController {
@Resource
UserService userService;
//
@PostMapping("/sendCode")
public Map<String,String> sendCode(@RequestBody User user){
boolean flag = userService.sendCode(user);
Map<String,String> map = new HashMap<>();
if (flag){
map.put("msg"," , ");
return map;
}else {
map.put("msg"," ");
return map;
}
}
//
@GetMapping("/lookCode/{token}")
public Map<String,String> lookCode(@PathVariable("token")String token){
boolean flag = userService.eqToken(token);
Map<String,String> map = new HashMap<>();
if (flag){
map.put("msg"," ");
/* ... ...*/
return map;
}else {
map.put("msg"," , ");
return map;
}
}
}
전단 페이지 를 쓰 지 않 았 기 때문에 postman 과 페이지 로 보 여 줍 니 다.postman 테스트
user 대상 전송
결과 되 돌리 기
메 일 링크
링크 등록 클릭 후
등록 성공 후 데이터베이스 전후 대비
등록 완료 전
등록 성공 후
총결산
이 가능 하 다,~할 수 있다,...
【1】일부 내부 네트워크 에 서 는 메 일 발송 을 지원 하지 않 습 니 다.코드 가 맞다 면 네트워크 를 바 꿔 보 세 요.
【2】로 컬 테스트 라면 로 컬 redis 에 연결 되 어 있 습 니 다.로 컬 redis 를 켜 십시오.
Spring Boot 메 일 링크 등록 인증 및 등록 절차 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 Spring Boot 메 일 등록 인증 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.