牛客后端项目(2)-注册模块开发
好久没更新啦!搞完科研搞项目了!!
使用Spring发送邮件
用到的依赖:Spring Boot Starter Mail
步骤:
- 在application.properties中配置。主要要配置:host、username、password及安全传输相关的配置。配置和相关内容见官方spring文档2.7.0版本
1 | smtp.163.com = |
- 构建发送邮件的工具类。主要用到的类是JavaMailSender。
- 发送邮件。主要用到的类是MimeMessage
Spring中的Value注解
工具类中需要用到邮箱名字(即username)。Value注解的作用就是将配置中的属性读出来。有@Value("${}")
和@Value("#{}")
两种方式,前者读的是配置文件中的内容,后者是SpEL表达式对应的内容(如,某个bean的属性),详见:spring的@Value注解使用_菊花超人的博客-CSDN
问题解决
在发送html格式的邮件时出现了乱码问题。而且在控制台输出结果时就乱码了,那么就不是传输过程中的编码问题。又试了别的html文件,发现输出是正常的。那就是这个文件可能在创建的时候用了别的编码,我把idea中文件编码格式全部换成UTF-8,然后重新创建一个html文件,就不乱码了。
展示!嘿嘿~
注册模块的开发
复杂业务开发过程中,可以根据请求来拆解。
- 跳转到注册页面
- 注册用户。(1)需要提供的信息(用户名、密码、邮箱);(2)信息的约束(用户名和邮箱不允许重复);(3)返回的结果(错误信息提示与注册成功的跳转
- 激活账号。
跳转到注册页面
用一个控制器转发请求即可
注册用户☆
按照三层架构根据自己的理解整理了流程,先开发Service层处理逻辑我感觉比较好。
Service层
按上图写就是了~
随机字符串生成:UUID
密码加密:对字符串后面接一个salt,再用MD5加密,MD5特点是无法解密;Spring中有对应方法实现了md5
问题解决
RequestMapping的路径书写
关于开头斜线的问题。之前写Servlet的时候好像一定得加,但是在Spring中可加可不加。因为在Spring中,web容器启动的时候spring会扫描并根据Controller注解找到所有Handler类,并且会遍历这些类找到所有带RequestMapping的方法,在这个过程中会对没有加斜线的路径自动拼接斜线。
参考:注解RequestMapping中的URI路径最前面到底需不需要加斜线?_hehuijava的博客-CSDN
密码、邮箱的合法性验证应在前端还是后端
在实现模块的时候,感觉合法性验证在开发中应该在前端的位置,这样用户体验感更好(能马上收到反馈),那这样一般在后端是不是就不需要实现了?
查了一下资料:一般在前端和后端都需要实现。前端为了用户体验,后端是数据处理的环节,必须对数据合法性进行保证以满足业务要求。
前端验证还是后端验证 - 简书
常量定义在类还是接口中?
在开发项目的时候需要为数字定义一个有含义的名字,就需要定义常量。我看的视频中老师用的方法是“常量接口模式”,但这种方法可能会导入一些用不到的常量。
而接口中声明的默认就是public static final
的常量类型,所以代码会更简洁。而且生成的.class文件比类更小。
最佳实践:将常量定义在一个接口中,然后直接用接口名.常量名
进行调用即可。
参考:关于 “java中常量定义在interface中好还是定义在class中好” 的一些思考_voo00oov的博客-CSDN
其他
在开发过程中,卡得最多的地方是thymeleaf🤣虽然说实际应用中前后端分离不太会用它,但现在卡着也多少有点浪费时间😅
主要会卡的地方:1. 总忘记加th:
!!!2. 别的暂时没想到
另外,开发经验太少,总有种不敢写的感觉,写得一多就担心会出错。。慢慢来吧,这好像也没办法,这种思维是要锻炼的。
- 验证码过期失效问题
- 激活成功后跳转应该自动登录了。
Controller层
向Service传user,调用注册方法,如果有错误信息就要向视图送,没有的话就重定向。这个也不太复杂。
激活邮箱
在注册模块完成了激活邮件的发送,链接是这样式儿的:网站名/verify-email?uid=169&code=22e08a5605f14d30a534fa1d3f9e0dcf
get传的参数直接作为controller的参数名
注意要判断是不是已经激活了等,几个状态考虑全就行。