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 메 일 등록 인증 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기