电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

Spring Boot郵箱鏈接注冊(cè)驗(yàn)證及注冊(cè)流程

瀏覽:95日期:2023-06-29 17:19:31
簡(jiǎn)單介紹

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

Spring Boot郵箱鏈接注冊(cè)驗(yàn)證及注冊(cè)流程

實(shí)現(xiàn)過(guò)程

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端口號(hào)(默認(rèn)6379) password: # redis密碼 mail: host: smtp.qq.com # 郵箱協(xié)議 username: 地址 # 發(fā)送的郵箱地址 password: 授權(quán)碼 # 郵箱的授權(quán)碼

3、定義實(shí)體類(lèi)

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

注意

此處沒(méi)有g(shù)et(),set()方法是因?yàn)閷?dǎo)入了lombok包

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

@Configurationpublic class RedisConfig { //編寫(xiě)自己的配置類(lèi) @Bean @SuppressWarnings('all') public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {//為了開(kāi)發(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、驗(yàn)證鏈接生成和郵箱發(fā)送的工具類(lèi)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('注冊(cè)'); // 郵箱標(biāo)題 String html = '<html>n' + '<body>n' + '<p>請(qǐng)點(diǎn)擊下方鏈接注冊(cè)</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是否過(guò)期 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 { // 添加用戶 注解開(kāi)發(fā)sql語(yǔ)句 @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ù)用戶注冊(cè)信息進(jìn)行注冊(cè)鏈接的的生成和發(fā)送 public boolean sendCode(User user); // 用戶點(diǎn)擊注冊(cè)鏈接判斷token是否過(guò)期 public boolean eqToken(String token);}

8、UserService的實(shí)現(xiàn)類(lèi)UserServiceImpl的配置

@Servicepublic class UserServiceImpl implements UserService { @Resource UserMapper userMapper; @Resource CodeUtils codeUtils; /** * 添加注冊(cè)的用戶信息 * @param user 注冊(cè)的用戶信息 * @return 是否添加成功 */ @Override public boolean adduser(User user) {return userMapper.addUser(user) > 0; } /** * 生成鏈接和發(fā)送鏈接 * @param address 接收的郵箱地址 * @param user 注冊(cè)的用戶信息 */ @Override public boolean sendCode(User user) { if ( codeUtils.sendCode(user)) // 調(diào)用驗(yàn)證鏈接生成工具類(lèi)中的生成鏈接和發(fā)送郵件函數(shù) return true; else return false; } /** * 判斷token是否過(guò)期 * @param token 用戶注冊(cè)所接收的token * @return 注冊(cè)成功與否 */ @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ù)用戶注冊(cè)信息進(jìn)行注冊(cè)鏈接的的生成和發(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ā)送成功,請(qǐng)前往您的郵箱進(jìn)行注冊(cè)驗(yàn)證'); return map;}else { map.put('msg','郵件發(fā)送失敗'); return map;} } // 判斷是否注冊(cè)成功 @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','注冊(cè)成功'); /* 后續(xù)的操作 ... ...*/ return map;}else { map.put('msg','注冊(cè)碼過(guò)期,請(qǐng)重新注冊(cè)'); return map;} }}

因?yàn)闆](méi)有寫(xiě)前端頁(yè)面,所以就用postman和頁(yè)面來(lái)演示

postman測(cè)試

傳入user對(duì)象

Spring Boot郵箱鏈接注冊(cè)驗(yàn)證及注冊(cè)流程

返回結(jié)果

Spring Boot郵箱鏈接注冊(cè)驗(yàn)證及注冊(cè)流程

郵箱鏈接

Spring Boot郵箱鏈接注冊(cè)驗(yàn)證及注冊(cè)流程

點(diǎn)擊注冊(cè)鏈接之后

Spring Boot郵箱鏈接注冊(cè)驗(yàn)證及注冊(cè)流程

注冊(cè)成功之后數(shù)據(jù)庫(kù)前后對(duì)比

注冊(cè)成功之前Spring Boot郵箱鏈接注冊(cè)驗(yàn)證及注冊(cè)流程注冊(cè)成功之后Spring Boot郵箱鏈接注冊(cè)驗(yàn)證及注冊(cè)流程

總結(jié)

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

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

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 共享雨伞_共享童车_共享轮椅_共享陪护床-共享产品的领先者_有伞科技 | 魔方网-培训咨询服务平台 | 超声波气象站_防爆气象站_空气质量监测站_负氧离子检测仪-风途物联网 | 招商帮-一站式网络营销服务|搜索营销推广|信息流推广|短视视频营销推广|互联网整合营销|网络推广代运营|招商帮企业招商好帮手 | 都江堰招聘网-都江堰人才网 都江堰人事人才网 都江堰人才招聘网 邢台人才网_邢台招聘网_邢台123招聘【智达人才网】 | 洛阳防爆合格证办理-洛阳防爆认证机构-洛阳申请国家防爆合格证-洛阳本安防爆认证代办-洛阳沪南抚防爆电气技术服务有限公司 | 换链神器官网-友情链接交换、购买交易于一体的站长平台 | 威廉希尔WilliamHill·足球(中国)体育官方网站 | 青岛侦探调查_青岛侦探事务所_青岛调查事务所_青岛婚外情取证-青岛狄仁杰国际侦探公司 | 金属软管_不锈钢金属软管_巩义市润达管道设备制造有限公司 | 蓝米云-专注于高性价比香港/美国VPS云服务器及海外公益型免费虚拟主机 | 岩棉板|岩棉复合板|聚氨酯夹芯板|岩棉夹芯板|彩钢夹芯板-江苏恒海钢结构 | 炒货机-炒菜机-炒酱机-炒米机@霍氏机械| 盘式曝气器-微孔曝气器-管式曝气器-曝气盘-斜管填料 | 郑州市前程水处理有限公司 | 全钢实验台,实验室工作台厂家-无锡市辰之航装饰材料有限公司 | 【星耀裂变】_企微SCRM_任务宝_视频号分销裂变_企业微信裂变增长_私域流量_裂变营销 | 深圳宣传片制作-企业宣传视频制作-产品视频拍摄-产品动画制作-短视频拍摄制作公司 | 卧涛科技有限公司科技项目申报公司|高新技术企业申报|专利申请 | PE一体化污水处理设备_地埋式生活污水净化槽定制厂家-岩康塑业 | 药品/药物稳定性试验考察箱-埃里森仪器设备(上海)有限公司 | 便携式表面粗糙度仪-彩屏硬度计-分体式粗糙度仪-北京凯达科仪科技有限公司 | 一礼通 (www.yilitong.com)-企业礼品解决方案一站式服务平台 | 蓄电池在线监测系统|SF6在线监控泄露报警系统-武汉中电通电力设备有限公司 | 氨水-液氨-工业氨水-氨水生产厂家-辽宁顺程化工 | 茶楼装修设计_茶馆室内设计效果图_云臻轩茶楼装饰公司 | 氨水-液氨-工业氨水-氨水生产厂家-辽宁顺程化工 | 工业冷却塔维修厂家_方形不锈钢工业凉水塔维修改造方案-广东康明节能空调有限公司 | 济南轻型钢结构/济南铁艺护栏/济南铁艺大门-济南燕翔铁艺制品有限公司 | 温州食堂承包 - 温州市尚膳餐饮管理有限公司 | 超细|超微气流粉碎机|气流磨|气流分级机|粉体改性机|磨粉机|粉碎设备-山东埃尔派粉体科技 | 重庆轻质隔墙板-重庆安吉升科技有限公司| 耐酸碱胶管_耐腐蚀软管总成_化学品输送软管_漯河利通液压科技耐油耐磨喷砂软管|耐腐蚀化学软管 | YJLV22铝芯铠装电缆-MYPTJ矿用高压橡套电缆-天津市电缆总厂 | 螺旋绞龙叶片,螺旋输送机厂家,山东螺旋输送机-淄博长江机械制造有限公司 | 海德莱电力(HYDELEY)-无功补偿元器件生产厂家-二十年专业从事电力电容器 | 鲁尔圆锥接头多功能测试仪-留置针测试仪-上海威夏环保科技有限公司 | 振动传感器,检波器-威海广达勘探仪器有限公司 | 算命免费_生辰八字_免费在线算命 - 卜算子算命网 | 精密冲床,高速冲床等冲压设备生产商-常州晋志德压力机厂 | 电动百叶窗,开窗器,电动遮阳百叶,电动开窗机生产厂家-徐州鑫友工控科技发展有限公司 | 北京浩云律师事务所-企业法律顾问_破产清算等公司法律服务 |