日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

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

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

注冊流程【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郵箱效果圖

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

實現過程

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@NoArgsConstructorpublic class User implements Serializable { private long id; private String account; private String password; private String username; }

注意

此處沒有get(),set()方法是因為導入了lombok包

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

@Configurationpublic 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序列化采用jacksontemplate.setValueSerializer(jackson2JsonRedisSerializer);//hash的Value序列化采用jacksontemplate.setHashValueSerializer(jackson2JsonRedisSerializer);template.afterPropertiesSet();return template; }}

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

@Componentpublic 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>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); // 郵箱內容 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@Repositorypublic 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的配置

@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; } /** * 生成鏈接和發送鏈接 * @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的配置

@RestControllerpublic 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對象

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

返回結果

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

郵箱鏈接

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

點擊注冊鏈接之后

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

注冊成功之后數據庫前后對比

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

總結

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

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

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲激情另类| 午夜在线精品偷拍| 在线免费观看亚洲| 亚洲激情偷拍| 好看的亚洲午夜视频在线| 久久久久99| 精品91福利视频| 高清久久精品| 成人国产精品一区二区免费麻豆| 久久99影视| 精品少妇av| www.51av欧美视频| 免费在线小视频| 激情欧美丁香| 久久国产99| 亚洲aa在线| 国产亚洲久久| 国产精品久久久久久久久免费高清| 国产免费av国片精品草莓男男| 久久国产免费看| 国产福利一区二区三区在线播放| 日本不卡视频在线| 国产精品亚洲综合在线观看| 精品中文字幕一区二区三区| 国产福利电影在线播放| 日韩精品欧美| 在线视频亚洲| 日韩和欧美一区二区三区| 欧美日韩a区| 精品少妇av| 一本一道久久a久久精品蜜桃| 爽好多水快深点欧美视频| 日本特黄久久久高潮| 你懂的国产精品| 极品av在线| 99综合视频| 亚洲18在线| 里番精品3d一二三区| 久久久久久久久久久妇女| 中文视频一区| 精品国产三区在线| 欧美特黄a级高清免费大片a级| 日韩精品欧美大片| 国产一区二区三区四区二区| 1024精品久久久久久久久| 亚洲美女久久| 久久一区国产| 亚洲国产专区| 91精品日本| 精精国产xxxx视频在线播放 | 国产精品毛片视频| 丝袜美腿诱惑一区二区三区 | 亚洲久久一区| 四季av一区二区凹凸精品| 波多野结衣一区| 日韩高清中文字幕一区| 97精品一区二区| 亚洲欧美日韩国产一区| 国产精品麻豆成人av电影艾秋 | 亚洲3区在线| 高清一区二区| 亚洲日本欧美| 97se综合| 日本在线视频一区二区| 久久久久免费| 五月国产精品| 精品丝袜在线| 国产精品xxx在线观看| 欧美jjzz| 免费在线亚洲| 视频一区视频二区中文字幕| 国产专区精品| 三级在线观看一区二区| 精品国产黄a∨片高清在线| 亚洲国产日韩欧美在线| 久久的色偷偷| 蜜桃传媒麻豆第一区在线观看| 国产一区二区视频在线看| 伊人国产精品| 91精品啪在线观看国产18| 国产欧美日韩在线观看视频| 欧美日韩国产传媒| 精品国产麻豆| 国产日韩欧美在线播放不卡| 亚洲精华国产欧美| 激情国产在线| 国产激情欧美| 欧美私人啪啪vps| 天堂成人免费av电影一区 | 久久久精品区| 日本不卡一区二区三区| 亚洲激情黄色| 99精品视频在线| 麻豆精品在线| 国产一卡不卡| 亚欧成人精品| 99在线精品免费视频九九视 | 国精品一区二区| 成人国产精品| 欧美黄色精品| 日韩国产欧美一区二区三区| 亚洲欧美久久| 黄页网站一区| 激情六月综合| 亚洲成人不卡| 国产一区二区三区网| 国产精品久久久久久妇女 | 国产精品v日韩精品v欧美精品网站| 蜜臀av性久久久久蜜臀aⅴ流畅 | 日韩中文字幕不卡| 亚洲福利精品| 成人看片网站| 日韩高清成人| 日韩网站中文字幕| jizzjizz中国精品麻豆| 精品99在线| 精品一级视频| 日韩av二区| 成人在线免费观看网站| 精品久久美女| 久久久亚洲欧洲日产| 国产美女久久| 国产精品手机在线播放| 欧美精品三级在线| 午夜亚洲福利| 国产欧美日韩免费观看| 国产精品密蕾丝视频下载| 国产精品2023| 精品资源在线| 欧美激情国产在线| 成人国产精品| 亚洲成av人片一区二区密柚| 亚洲午夜一级| 国产精品毛片一区二区三区| 视频一区欧美精品| 亚洲欧洲日韩| 久久激情av| 麻豆91精品视频| 国产精品精品国产一区二区| 精品国产18久久久久久二百| 97精品国产一区二区三区| 日韩三区在线| 亚洲一区二区三区四区五区午夜| 午夜亚洲精品| 日本不卡视频在线观看| 国产精品一区二区精品视频观看| 你懂的亚洲视频| 日韩久久一区二区三区| 欧美久久精品一级c片| 在线精品视频一区| 久久国产三级| 日本蜜桃在线观看视频| 99视频+国产日韩欧美| 日本不卡在线视频| 久久伊人久久| 99精品视频在线观看免费播放| 一区在线视频观看| 亚洲精品成人一区| 国产精品久久久免费| 麻豆视频在线看| 99久久精品网站| 亚洲一区二区小说| 卡一卡二国产精品| 欧美 日韩 国产精品免费观看| 日韩专区欧美专区| 国产精品白丝久久av网站| 日韩欧美不卡| 视频一区欧美日韩| 精品午夜av| 亚洲天堂久久| 日韩一区二区三区在线看| 麻豆成人91精品二区三区| 国产91一区| 日韩免费精品| 色一区二区三区| 日韩在线一区二区| 精品久久视频| 蜜臀精品一区二区三区在线观看| 久久亚洲精品中文字幕| 国产高清一区| 91精品日本| 欧美日韩一二| 欧美久久亚洲| 欧美日韩视频| 欧美激情日韩| 午夜日本精品| 你懂的国产精品| 久久高清国产| 四季av一区二区凹凸精品| 老色鬼久久亚洲一区二区| 麻豆久久一区| 免费在线观看视频一区| 久久精品国产网站| 中文日韩欧美| 国产一区二区三区91| 久久99伊人| 日韩一区自拍| 欧美中文一区| 亚洲精品网址| 精品一区二区男人吃奶|