色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

Spring Boot郵箱鏈接注冊驗證及注冊流程

瀏覽:75日期:2023-06-29 17:19:31
簡單介紹

注冊流程【1】前端提交注冊信息【2】后端接受數(shù)據(jù)【3】后端生成一個UUID做為token,將token作為redis的key值,用戶數(shù)據(jù)作為redis的value值,并設置key的時長【4】后端根據(jù)用戶信息中的郵箱地址信息,檢驗用戶是否已經(jīng)注冊,如果沒有,生成注冊鏈接發(fā)送到用戶郵箱,如果已經(jīng)注冊,提示用戶該郵箱地址已被注冊【5】用戶點擊郵件中的注冊鏈接【6】后端判斷redis中token是否過期,沒有將用戶信息保存到數(shù)據(jù)庫,提示用戶注冊成功項目源碼:https://gitee.com/residual-temperature/email-link-demo.git郵箱效果圖

Spring Boot郵箱鏈接注冊驗證及注冊流程

實現(xiàn)過程

1、pom文件要加入的jar包

<!-- 郵件相關(guān) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <!-- redis相關(guān) --> <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 # 郵箱協(xié)議 username: 地址 # 發(fā)送的郵箱地址 password: 授權(quán)碼 # 郵箱的授權(quán)碼

3、定義實體類

@Repository@Data@AllArgsConstructor@NoArgsConstructorpublic class User implements Serializable { private long id; private String account; private String password; private String username; }

注意

此處沒有g(shù)et(),set()方法是因為導入了lombok包

4、redis的config配置對象的保存需要序列化,所以需要自定義RedisTemplete

@Configurationpublic class RedisConfig { //編寫自己的配置類 @Bean @SuppressWarnings('all') public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {//為了開發(fā)方便一般使用<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序列化采用jacksontemplate.setValueSerializer(jackson2JsonRedisSerializer);//hash的Value序列化采用jacksontemplate.setHashValueSerializer(jackson2JsonRedisSerializer);template.afterPropertiesSet();return template; }}

5、驗證鏈接生成和郵箱發(fā)送的工具類CodeUtils的配置

@Componentpublic class CodeUtils { @Resource JavaMailSender mailSender; @Resource RedisTemplate<String, User> redisTemplate; // 生成鏈接,并給接收的郵箱發(fā)送郵件 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('發(fā)送方的郵箱地址'); //發(fā)送方的郵箱地址,而不是接收方的郵箱地址 messageHelper.setTo(user.getAddress()); // 接收方的郵箱地址 messageHelper.setSubject('注冊'); // 郵箱標題 String html = '<html>n' + '<body>n' + '<p>請點擊下方鏈接注冊</p>n' + '<a href='http://localhost:8081/lookCode/'+token+''>http://localhost:8081/lookCode/'+token+'</a>' + '</body>n' + '</html>'; messageHelper.setText(html,true); // 郵箱內(nèi)容 mailSender.send(message); // 發(fā)送郵箱 System.out.println('發(fā)送成功'); return true;}catch (Exception e){ System.out.println('發(fā)送失敗'); return false;} } // 判斷token是否過期 public boolean eqToken(String token){return redisTemplate.hasKey(token); } // 根據(jù)token查詢用戶的信息 public User findUser(String token){return redisTemplate.opsForValue().get(token); }}

6、UserMapper的配置

@Mapper@Repositorypublic interface UserMapper { // 添加用戶 注解開發(fā)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); // 根據(jù)用戶注冊信息進行注冊鏈接的的生成和發(fā)送 public boolean sendCode(User user); // 用戶點擊注冊鏈接判斷token是否過期 public boolean eqToken(String token);}

8、UserService的實現(xiàn)類UserServiceImpl的配置

@Servicepublic class UserServiceImpl implements UserService { @Resource UserMapper userMapper; @Resource CodeUtils codeUtils; /** * 添加注冊的用戶信息 * @param user 注冊的用戶信息 * @return 是否添加成功 */ @Override public boolean adduser(User user) {return userMapper.addUser(user) > 0; } /** * 生成鏈接和發(fā)送鏈接 * @param address 接收的郵箱地址 * @param user 注冊的用戶信息 */ @Override public boolean sendCode(User user) { if ( codeUtils.sendCode(user)) // 調(diào)用驗證鏈接生成工具類中的生成鏈接和發(fā)送郵件函數(shù) 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的配置

@RestControllerpublic class UserController { @Resource UserService userService; // 根據(jù)用戶注冊信息進行注冊鏈接的的生成和發(fā)送 @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','郵件發(fā)送成功,請前往您的郵箱進行注冊驗證'); return map;}else { map.put('msg','郵件發(fā)送失敗'); 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','注冊成功'); /* 后續(xù)的操作 ... ...*/ return map;}else { map.put('msg','注冊碼過期,請重新注冊'); return map;} }}

因為沒有寫前端頁面,所以就用postman和頁面來演示

postman測試

傳入user對象

Spring Boot郵箱鏈接注冊驗證及注冊流程

返回結(jié)果

Spring Boot郵箱鏈接注冊驗證及注冊流程

郵箱鏈接

Spring Boot郵箱鏈接注冊驗證及注冊流程

點擊注冊鏈接之后

Spring Boot郵箱鏈接注冊驗證及注冊流程

注冊成功之后數(shù)據(jù)庫前后對比

注冊成功之前Spring Boot郵箱鏈接注冊驗證及注冊流程注冊成功之后Spring Boot郵箱鏈接注冊驗證及注冊流程

總結(jié)

可能會遇到的問題【1】有些內(nèi)部網(wǎng)絡不支持發(fā)送郵箱,如果保證代碼沒錯,可以換個網(wǎng)絡試試【2】如果是在本地測試,連接的是本地redis,記得開啟本地的redis

到此這篇關(guān)于Spring Boot郵箱鏈接注冊驗證及注冊流程的文章就介紹到這了,更多相關(guān)Spring Boot郵箱注冊驗證內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 免费在线观看毛片 | 美女黄影院 | 亚洲欧美人妖另类激情综合区 | 免费手机黄色网址 | 久久99热只有视精品6国产 | 亚洲综合日韩欧美一区二区三 | 免费播放欧美毛片欧美a | 久夜色精品国产一区二区三区 | a级毛片免费| 欧美兽皇video | 怡红院免费在线视频 | 欧美一区二区三区在线视频 | 欧美色网在线 | 国产视频一区二区三区四区 | 一级毛片黄片 | 韩国福利影视一区二区三区 | 情侣偷偷看的羞羞视频网站 | 美女与男人对肌免费网站 | 国产三级观看 | 97国产大学生情侣11在线视频 | 亚欧精品在线观看 | 国产一区在线免费观看 | 久久久久久久久一次 | 免费人成综合在线视频 | 国产99视频精品免费观看9e | 日本免费高清视频二区 | 美女张开大腿让男人桶 | 亚洲欧美成人综合久久久 | 亚洲综合日本 | 欧美成人免费一级人片 | 欧美毛片一级的免费的 | 丁香伊人五月综合激激激 | 欧美激情欧美狂野欧美精品免费 | 精品成人免费一区二区在线播放 | 免费观看情趣v视频网站 | 久久99热久久精品91 | 三级网站免费 | 亚洲国产第一区二区三区 | 一级一片免费看 | 欧美精品人爱c欧美精品 | 久久亚洲私人国产精品 |