一、简介
Github地址:https://github.com/CR553/MailBox
这是我们学校的一次计算机网络课程设计,要求如下:用户可以登录注册,基于SMTP协议发送邮件,基于POP3协议接收邮件。
使用技术及版本如下:Springboot 2.2.2,mybatis 2.1.2,shiro 1.5.3,javax.mail。
Maven依赖如下:
<dependencies>
配置文件如下:
spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/MailUser?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: cr553.task3.pojo
效果图如下:
首页
登录
注册
发送邮件
查看邮件
二、实现
权限管理实现
shiro的权限管理主要在这两个类中,自定义UserRealm和配置类中。实现权限配置的操作主要在getShiroFilterFactoryBean()方法中,将要配置的路径和权限保存在一个map中。authc表示只有登录才能够访问,setLoginUrl用来设置登录路径。
@Configuration
用户登录操作会转到自定义UserRealm中的认证中,此时用户账号和密码都在userToken中。认证阶段主要包括用户名认证和密码认证,将从前端获取的和数据库中查询的做个比较即可。
public
登录功能实现
说注册登录之前先把实体类,dao,service层简单贴一下。
实体类,用了Lombok
@Data
Dao层
@Mapper
service层
@Service
登录和登出在controller中实现。这里将前端获取的用户名和密码封装到token中,传入上面说的userRealm中,第一个异常是抓用户名错误,第二个抓密码错误,统一表述为用户名或密码错误。登录核心方法:subject.login(token);登出核心方法:subject.logout() 。
//登录
注册功能实现
注册功能实现在controller层中,注册常规操作,检查前端输入的表单的规范性,全满足后存入数据库。
//注册
邮件发送实现
send方法为核心方法,先创建一个session域,设置好用户和密码,qq邮箱的服务器地址和端口之类的信息。在MimeMessage 中设置好内容,发件人,主题等信息,利用transport类依照smtp协议发送邮件。sendMail方法中主要是对前端表单进行一个校验,调用send()方法而已。
@Controller
邮件查看实现
getAllMails()是主要实现方法。和发送邮件相似,创建一个session,设置好服务器地址和端口,用户名密码等信息,利用store类获取folder类,在folder类中可以获取该用户所有邮件。receiveMail()方法中主要是调用了getAllMails()方法,和一系类解析邮件的的静态方法。将每个邮件的信息封装到自定义ReceiveMessage类中,为了前端thymeleaf渲染。
@Controller
页面
页面实现我就只说一下查看邮件页面和首页页面。
首页
<!DOCTYPE html>
css样式
*
顺便贴一下自己随手画的Logo:
感觉还挺帅的Q.Q 我那两个该屎的室友审美真差劲!嘿嘿
查看邮件
receiveMail.html中用thymeleaf模板引擎获取从上面receiveMail()方法中传过来的mailList。用th:each遍历一下即可,这里我偷了个懒,使用了bootstarp table实现分页效果,具体如何实现可以百度。大概就是下好文件,引入一下,在js中配置一下第一行信息,分多少页之类的。
<!DOCTYPE html>
css样式参考一下吧
#
三、总结
这个程序较为适合新手入门吧,业务逻辑简单,两个SQL,两个核心功能,数据交互也不复杂,表单提交前端数据,thymeleaf提交后端数据。在网上关于这个的博客大多没有界面,或者说是技术栈太老套,因此做这个的目的一个是为了应付一下课程设计,一个是为了填补一下邮件收发系统在SSM中的空白,方便后者迭代更新。