1.开发社区首页
1,查询帖子列表这里参数需要多传一个用户id,因为后面需要点击进去帖子详情
2,这里使用动态sql作为拼接userId,不等于0的时候才拼接,status
等于2的时候是拉黑排除掉
3,安装类型时间降序排序
2.开发登录模块
2.1 邮箱
1,引入邮箱依赖
2,邮箱参数配置
3,使用javaMailSender
发送邮件,使用 ``MimeMessageHelper构建
MimeMessage`
4,参数发送人,发送的主题,发送的内容
5,使用模板发送,注入TemplateEngine(模板引擎)
,需要实例化Context设置发送的内容
2.2 注册
1,业务层需要判断controller传user是否为空
2,判断账号用户密码邮箱不能为空,为空发送错误页面
3,根据用户名查询数据库是否有数据,如果有直接给个提示
4,注册用户
4.1,设置盐加密0到5位,设置用户密码加密,设置类型为0普通用户,设置状态为0未激活,设置激活码,设置用户头像,用牛客网头像使用随机头像new Random().nextInt(1000)
,设置日期,最后添加到数据库
4.2,激活邮箱:
实例化Context,设置变量邮箱,url跳转地址,templateEngine.process(路径,context)返回内容字符串
,最后调用工具类发送邮箱
5,controller层先判断传的值是否为空值,和空字符串,如果不为空说明有异常
6,controller激活邮箱方法,需要获取路径中的参数(用户id,激活码)
7,需要在业务层写一个方法判断(激活,重复激活,激活失败)
7.1,根据用户id查询如果状态为1说明激活过了,否则传过来的验证码是否一致然后调用修改的方法把状态改为1,其他激活失败
2.3 会话管理
2.4 验证码
1,需要导入kaptcha
依赖
2,验证码controller
2.1,注入Producer
@Bean
2.2,调用createText()生成验证码
2.3,调用createImage()转换为图片
2.4,将验证码存在session中
2.5,设置图片格式
2.6,读写响应到浏览器
2.5 登录
1,业务层开发
1.1,验证账号空值处理
1.2,验证密码空值处理
1.3,根据用户名查询,为空,返回错误
1.4,验证状态是否激活
1.5,验证密码是否正确
1.6,生成登录凭证
2,controller开发
2.1,校验验证码
2.2,设置超时时间
2.3,调用业务层login方法
2.4,判断map中是否包含ticket,存在cookie
2.5,其他把错误的存在model中
2.6 退出
1,根据ticket修改状态为1退出
2,controller层,用@CookieValue注解获取cookie
,实现退出功能
2.7 显示登录信息
1,需要实现拦截器HandlerInterceptor
2,需要编写获取cookie的工具类
3,需要用到ThreadLocal
持有用户信息
4,拦截器实现preHandle,postHandle,afterCompletion
三个方法
4.1,preHandle
在请求之前获取用户信息,存在ThreadLocal
中
4.2,postHandle
在模板渲染之前获取用户信息,存在域对象中
4.3,afterCompletion
模板调用完之后清理掉用户信息hostHolser
5,配置拦截器需要实现WebMvcConfigurer
,编写方法传参数InterceptorRegistry(拦截器注册表)
,调用addInterceptor(添加拦截器)
,excludePathPatterns(放行路径)一般都是静态资源
,excludePathPatterns(放行)
方法
2.8 设置账号头像
1,上传头像需要注意的是必须是post请求,表单是enctype="multipart/form-data"
,Multipart上传文件
2,业务层根据用户id修改头像
3,controller层编写上传头像
3.1,判断上传头像是否为空,为空,页面显示错误提示
3.2,得到头像的源文件getOriginalFilename()
方法
3.3,截取头像后缀,从.
后面截取,截取返回为空,直接返回页面提示错误信息
3.4,拼接图片文件名
3.5,确定文件存放路径
3.6,Multipart
调用transferTo(文件路径)存文件
3.7,需要重新修改下头像存放的web路径
2.9 获取头像
1,是通过路径获取
2,获取服务器存放的路径
3,需要截取动态获取文件的后缀响应到浏览器
4,读写操作获取头像
2.10 检查登录状态
1,使用注解标记需要拦截的方法
2,拦截器判断
- 判断拦截的是不是方法
- 如果是方法,得到方法的注解
- 如果有我们上面自定义的方法,说明这个方法登录了才能访问
- 如果当前没有登录,return false,拒绝请求,返回登陆页面
3. 开发社区核心功能
3.1 过滤敏感词
3.2 发布帖子
1,需要发送异步请求
2,需要用到fastjson
传输json
数据
3,需要新建一个工具类CommunityUtil
4,业务层
4.1,转义HTML标记HtmlUtils.htmlEscape()方法,
4.2,过滤敏感词
5,controller层
5.1, 判断当前是否登录,没登陆返回code:403
5.1,登录返回成功的状态码和提示消息
6,编写异步请求代码
3.3 帖子详情
1,根据路径传的帖子id,点击进去进去帖子详情页面,controller层调用根据i