充值密码 & 去除土味情话 优化了斗图样式

This commit is contained in:
2022-06-07 23:53:40 +08:00
parent 45755da454
commit cbf3d6029d
17 changed files with 373 additions and 188 deletions

View File

@@ -3,12 +3,16 @@ package com.quinn.common;
public enum EmailType {
/**
* 论坛
* 注册
*/
REGISTER,
/**
* 资源
* 注册成功
*/
SUCCESS
SUCCESS,
/**
* 充值密码
*/
RESET
}

View File

@@ -4,6 +4,8 @@ public interface QuinnConstant {
String LINK_SUFFIX = ".";
String LINK_URL = "/";
String LINK_KEY_WORD = ",";
String LINK_DATE_STR = "_";
@@ -39,4 +41,6 @@ public interface QuinnConstant {
String DEFAULT_ATTR = "/images/avatar/a#.png";
String EMAIL_REPLACE = "#!!#";
String EMAIL_REPLACE_ALL = "#!#";
}

View File

@@ -28,7 +28,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
// 访问权限
http.authorizeRequests()
.antMatchers("/","/index","/favicon.ico").permitAll()
.antMatchers("/register","/login","/toLogin","/checkLogin","/checkRegister").permitAll()
.antMatchers("/register","/login","/forget","/resetPwd/*/*","/toLogin","/checkLogin","/checkRegister").permitAll()
.antMatchers("/source","/source/view/*").permitAll()
.antMatchers("/blog","/blog/read/*").permitAll()
.antMatchers("/guess","/favor","/firework").permitAll()

View File

@@ -4,8 +4,6 @@ package com.quinn.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.quinn.common.ExpBucket;
import com.quinn.intergration.BucketImage;
import com.quinn.intergration.TodayLove;
import com.quinn.pojo.About;
import com.quinn.service.AboutService;
import com.quinn.utils.QuinnUtils;
@@ -34,8 +32,6 @@ public class AboutController extends BaseModelController {
@Resource
AboutService aboutService;
@Resource
TodayLove todayLove;
@GetMapping("/about")
public String userIndexBlog(HttpServletRequest request,Model model){
@@ -62,8 +58,6 @@ public class AboutController extends BaseModelController {
// 列表展示
@GetMapping("/favor")
public String sourceList(Model model) throws IOException {
// 每日情话
model.addAttribute("LoveList",todayLove.getTodayLoveStr());
MyPageParam pageParam = new MyPageParam(1,24);
List<ExpBucket> recordList = aboutService.listExp(null,pageParam);
model.addAttribute("recordList",recordList);
@@ -73,8 +67,6 @@ public class AboutController extends BaseModelController {
@PostMapping("/favor")
public String blogListPage(FindNavReq findNavReq, Model model) throws IOException {
// 每日情话
model.addAttribute("LoveList",todayLove.getTodayLoveStr());
int page = findNavReq.getPageNum();
int limit = findNavReq.getLimit();
if (findNavReq.getPageNum() < 1){

View File

@@ -1,10 +1,10 @@
package com.quinn.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.quinn.common.QuinnConstant;
import com.quinn.common.QuinnException;
import com.quinn.common.RoleType;
import com.quinn.intergration.AttrIcon;
import com.quinn.intergration.TodayLove;
import com.quinn.pojo.Invite;
import com.quinn.pojo.User;
import com.quinn.pojo.UserInfo;
@@ -12,18 +12,21 @@ import com.quinn.service.InviteService;
import com.quinn.service.UserInfoService;
import com.quinn.service.UserService;
import com.quinn.task.SendAsyncEmail;
import com.quinn.task.SendForgetEmail;
import com.quinn.utils.AsyncTaskUtil;
import com.quinn.utils.QuinnUtils;
import com.quinn.vo.CheckLoginForm;
import com.quinn.vo.RegisterForm;
import com.quinn.vo.ResetForm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@@ -73,6 +76,58 @@ public class LoginController {
return "register";
}
@GetMapping("/forget")
public String toForget(){
return "forget";
}
@PostMapping("/forget")
public void forgetPassword(HttpServletResponse response,String forgetUsername) throws IOException {
response.setCharacterEncoding("UTF-8");
PrintWriter writer = response.getWriter();
// 检查用户状态
User hasUser = userService.getOne(new QueryWrapper<User>().eq("username", forgetUsername));
if (hasUser == null){
toResult(writer,"用户不存在,请检查用户名!");
return;
}
if (!StringUtils.isEmpty(hasUser.getResetKey())){
toResult(writer,"用户正在重置密码,请留意您的邮箱");
return;
}
UserInfo userInfo = userInfoService.getById(hasUser.getUid());
String resetKey = QuinnUtils.getUuid();
String resetUrl = QuinnConstant.LINK_URL + hasUser.getUid() + QuinnConstant.LINK_URL + resetKey;
hasUser.setResetKey(resetKey);
// 发邮件
AsyncTaskUtil.INSTANCE.submit(new SendForgetEmail(hasUser.getUsername(),resetUrl,userInfo.getEmail()));
// 更新用户状态
userService.updateById(hasUser);
toResult(writer,"ok");
}
@GetMapping("/resetPwd/{uid}/{key}")
public String resetPwd(@PathVariable("uid") String uid,@PathVariable("key") String key){
User user = userService.getOne(new QueryWrapper<User>().eq("uid", uid));
if (user == null || !key.equals(user.getResetKey())){
throw new QuinnException("防爬虫,重置密码钥匙错误");
}
return "resetPwd";
}
@PostMapping("/resetPwd/{uid}/{key}")
public String resetPassword(ResetForm resetForm, @PathVariable("uid") String uid, @PathVariable("key") String key){
User hasUser = userService.getOne(new QueryWrapper<User>().eq("uid", uid));
if (hasUser == null || !key.equals(hasUser.getResetKey())){
throw new QuinnException("防爬虫,重置密码钥匙错误");
}
// 密码加密 TODO 此处还是应该先校验一下
String bCryptPassword = new BCryptPasswordEncoder().encode(resetForm.getPassword());
hasUser.setPassword(bCryptPassword);
userService.updateById(hasUser);
return "redirect:/toLogin";
}
// 注册业务
@PostMapping("/checkRegister")
public void checkRegister(HttpServletResponse response,RegisterForm registerForm) throws IOException {
@@ -106,7 +161,7 @@ public class LoginController {
// 注册业务
@PostMapping("/register")
public String register(RegisterForm registerForm, Model model) throws IOException {
public String register(RegisterForm registerForm) {
// 表单密码重复判断
if (!registerForm.getPassword().equals(registerForm.getRepassword())){
throw new QuinnException("防爬虫,两次输入密码不一致!");
@@ -145,7 +200,7 @@ public class LoginController {
inviteService.updateById(invite);
userInfoService.save(new UserInfo().setUid(user.getUid()).setEmail(registerForm.getEmail()));
// 发送注册成功通知邮件
AsyncTaskUtil.INSTANCE.submit(new SendAsyncEmail(registerForm.getUsername(),registerForm.getEmail()));
AsyncTaskUtil.INSTANCE.submit(new SendAsyncEmail(registerForm.getPassword(),registerForm.getEmail()));
// 注册成功,重定向到登录页面
return "redirect:/toLogin";
}

View File

@@ -9,6 +9,7 @@ import com.quinn.utils.SpringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import javax.mail.Authenticator;
@@ -20,6 +21,7 @@ import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
/**
* 使用@multiavatar生成头像
@@ -48,7 +50,17 @@ public class SendBMail {
}
public boolean sendParamsMail(EmailType emailType, String email, Map<String,String> map){
return true;
// 可以设计枚举,使用同一个发送邮件的公共方法
Email emailMode = emailService.getOne(new QueryWrapper<Email>().eq("type",emailType.name()));
String content = emailMode.getContent();
if (!CollectionUtils.isEmpty(map)){
Set<String> keys = map.keySet();
for (String x : keys) {
content = content.replaceAll(QuinnConstant.EMAIL_REPLACE_ALL + x + QuinnConstant.EMAIL_REPLACE_ALL
,map.get(x));
}
}
return sendMail(emailMode.getTitle(), content,email);
}
private boolean sendMail(String subject,String content,String toEmail){

View File

@@ -1,54 +0,0 @@
package com.quinn.intergration;
import com.fasterxml.jackson.core.type.TypeReference;
import com.quinn.common.QuinnConstant;
import com.quinn.utils.JsonUtils;
import com.quinn.utils.QuinnUtils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.io.*;
import java.util.*;
@Component
public class TodayLove implements InitializingBean {
private List<String> dictionary = new ArrayList<>();
public List<String> getTodayLoveStr() throws IOException {
if (CollectionUtils.isEmpty(dictionary)){
makeDictionary();
}
int days = QuinnUtils.differentDays(new Date(2022, 4, 1), new Date());
int i = days % dictionary.size();
String todayStr = dictionary.get(i);
String[] split = todayStr.split(QuinnConstant.LINK_LOVE_STR);
return Arrays.asList(split);
}
@Override
public void afterPropertiesSet() throws Exception {
makeDictionary();
}
private void makeDictionary() throws IOException {
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] resources = resolver.getResources("bqb/love.json");
Resource resource = resources[0];
InputStream is = resource.getInputStream();
InputStreamReader insReader = new InputStreamReader(
is, "UTF-8");
BufferedReader bufReader = new BufferedReader(insReader);
String json = bufReader.readLine();
bufReader.close();
insReader.close();
List<String> decode = JsonUtils.decode(json, new TypeReference<List<String>>() {
});
dictionary = decode;
}
}

View File

@@ -47,6 +47,9 @@ public class User implements Serializable {
@ApiModelProperty(value = "头像")
private String avatar;
@ApiModelProperty(value = "重置密码钥匙")
private String resetKey;
@ApiModelProperty(value = "登录时间")
private Date loginDate;

View File

@@ -0,0 +1,34 @@
package com.quinn.task;
import com.quinn.common.EmailType;
import com.quinn.intergration.SendBMail;
import com.quinn.utils.SpringUtils;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
@Data
public class SendForgetEmail implements Runnable{
String username;
String email;
String resetUrl;
public SendForgetEmail(String username,String resetUrl, String email) {
this.username = username;
this.resetUrl = resetUrl;
this.email = email;
}
@Override
public void run() {
SendBMail sendBMail = SpringUtils.getBean(SendBMail.class);
Map<String,String> map = new HashMap<>();
map.put("username",username);
map.put("resetUrl",resetUrl);
sendBMail.sendParamsMail(EmailType.RESET,email,map);
}
}

View File

@@ -0,0 +1,19 @@
package com.quinn.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class ResetForm {
@ApiModelProperty(value = "密码")
private String password;
@ApiModelProperty(value = "确认密码")
private String repassword;
}