diff --git a/src/main/java/com/quinn/common/EmailType.java b/src/main/java/com/quinn/common/EmailType.java new file mode 100644 index 0000000..5f51a61 --- /dev/null +++ b/src/main/java/com/quinn/common/EmailType.java @@ -0,0 +1,14 @@ +package com.quinn.common; + +public enum EmailType { + + /** + * 论坛 + */ + REGISTER, + /** + * 资源 + */ + SUCCESS + +} diff --git a/src/main/java/com/quinn/common/QuinnConstant.java b/src/main/java/com/quinn/common/QuinnConstant.java index 70d67f9..5281af1 100644 --- a/src/main/java/com/quinn/common/QuinnConstant.java +++ b/src/main/java/com/quinn/common/QuinnConstant.java @@ -35,4 +35,6 @@ public interface QuinnConstant { String DEFAULT_ATTR_BASE64 = "/images/avatar/a1.png"; String DEFAULT_ATTR = "/images/avatar/a#.png"; + + String EMAIL_REPLACE = "#!!#"; } diff --git a/src/main/java/com/quinn/config/SecurityConfig.java b/src/main/java/com/quinn/config/SecurityConfig.java index 4858a88..5d88421 100644 --- a/src/main/java/com/quinn/config/SecurityConfig.java +++ b/src/main/java/com/quinn/config/SecurityConfig.java @@ -28,7 +28,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { // 访问权限 http.authorizeRequests() .antMatchers("/","/index","/favicon.ico").permitAll() - .antMatchers("/register","/login","/toLogin","/checkLogin").permitAll() + .antMatchers("/register","/login","/toLogin","/checkLogin","/checkRegister").permitAll() .antMatchers("/source","/source/view/*").permitAll() .antMatchers("/blog","/blog/read/*").permitAll() .antMatchers("/search/**").permitAll() diff --git a/src/main/java/com/quinn/controller/LoginController.java b/src/main/java/com/quinn/controller/LoginController.java index ca01f32..6eb530d 100644 --- a/src/main/java/com/quinn/controller/LoginController.java +++ b/src/main/java/com/quinn/controller/LoginController.java @@ -79,20 +79,27 @@ public class LoginController { // 表单密码重复判断 if (!registerForm.getPassword().equals(registerForm.getRepassword())){ toResult(writer,"两次输入密码不一致!"); + return; } // 用户名已存在 User hasUser = userService.getOne(new QueryWrapper().eq("username", registerForm.getUsername())); if (hasUser!=null){ toResult(writer,"用户名太热门了,请更换用户名"); + return; } // 验证邀请码 - Invite invite = inviteService.getOne(new QueryWrapper().eq("code", registerForm.getCode())); + Invite invite = inviteService.getOne(new QueryWrapper() + .eq("code", registerForm.getCode()) + .eq("status",'0')); if (invite==null){ toResult(writer,"注册码不存在!"); + return; } if (!invite.getApplyEmail().equals(registerForm.getEmail())){ toResult(writer,"请使用申请注册码邮箱注册用户!"); + return; } + toResult(writer,"ok"); } // 注册业务 diff --git a/src/main/java/com/quinn/controller/WxController.java b/src/main/java/com/quinn/controller/WxController.java index f036df8..b00478a 100644 --- a/src/main/java/com/quinn/controller/WxController.java +++ b/src/main/java/com/quinn/controller/WxController.java @@ -3,6 +3,7 @@ package com.quinn.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.quinn.common.EmailType; import com.quinn.dto.req.SearchPage; import com.quinn.dto.req.SendCode; import com.quinn.dto.res.AboutDTO; @@ -10,23 +11,15 @@ import com.quinn.dto.res.ResponseDTO; import com.quinn.intergration.SendBMail; import com.quinn.pojo.About; import com.quinn.pojo.Invite; -import com.quinn.pojo.UserInfo; import com.quinn.service.AboutService; import com.quinn.service.InviteService; -import com.quinn.service.UserInfoService; -import com.quinn.service.UserService; import com.quinn.utils.QuinnUtils; import com.quinn.vo.MyPageParam; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.List; @@ -44,9 +37,9 @@ public class WxController extends BaseModelController { @Resource AboutService aboutService; @Resource - UserInfoService userInfoService; - @Resource InviteService inviteService; + @Resource + SendBMail sendBMail; @PostMapping("about/us") public ResponseDTO userIndexBlog(SearchPage searchPage){ @@ -83,9 +76,9 @@ public class WxController extends BaseModelController { invite.setCode(code); invite.setGmtCreate(QuinnUtils.getTime()); inviteService.save(invite); - boolean sendFlag = SendBMail.INSTANCE.sendRegisterMail(code, sendCode.getEmail()); + boolean sendFlag = sendBMail.sendOneParamMail(EmailType.REGISTER,code, sendCode.getEmail()); if (!sendFlag){ - return ResponseDTO.ok().setData("发送识别,请确认邮箱是否正确!"); + return ResponseDTO.ok().setData("发送失败,请确认邮箱是否正确!"); } return ResponseDTO.ok().setData("success"); } diff --git a/src/main/java/com/quinn/generator/CodeGenerator.java b/src/main/java/com/quinn/generator/CodeGenerator.java index 2c04c8c..723402c 100644 --- a/src/main/java/com/quinn/generator/CodeGenerator.java +++ b/src/main/java/com/quinn/generator/CodeGenerator.java @@ -51,7 +51,7 @@ public class CodeGenerator { // 5、策略配置 StrategyConfig strategy = new StrategyConfig(); - strategy.setInclude("qn_star");//设置要映射的表名 + strategy.setInclude("qn_email");//设置要映射的表名 strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略 strategy.setTablePrefix("qn_");//设置表前缀不生成 diff --git a/src/main/java/com/quinn/intergration/SendBMail.java b/src/main/java/com/quinn/intergration/SendBMail.java index f1d9b32..6dff60b 100644 --- a/src/main/java/com/quinn/intergration/SendBMail.java +++ b/src/main/java/com/quinn/intergration/SendBMail.java @@ -1,7 +1,16 @@ package com.quinn.intergration; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.quinn.common.EmailType; +import com.quinn.common.QuinnConstant; +import com.quinn.pojo.Email; +import com.quinn.service.EmailService; +import com.quinn.utils.SpringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.PasswordAuthentication; @@ -9,15 +18,16 @@ import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; +import java.util.Map; import java.util.Properties; /** * 使用@multiavatar生成头像 * https://api.multiavatar.com/ */ -public enum SendBMail { +@Component +public class SendBMail { - INSTANCE; private static final Logger log = LoggerFactory.getLogger(SendBMail.class); final String username = "quinn.admin@88.com"; final String password = "Y3YYd4hcY2fFB9VY"; @@ -27,14 +37,18 @@ public enum SendBMail { boolean isAuth = true; String from = "quinn.admin@88.com"; - public boolean sendRegisterMail(String registerCode,String email){ - return sendMail("QUINN注册码", - "您好,您的注册码是【" + registerCode + "】",email); + @Resource + EmailService emailService; + + public boolean sendOneParamMail(EmailType emailType, String param, String email){ + // 可以设计枚举,使用同一个发送邮件的公共方法 + Email register = emailService.getOne(new QueryWrapper().eq("type",emailType.name())); + String content = register.getContent().replace(QuinnConstant.EMAIL_REPLACE, param); + return sendMail(register.getTitle(), content,email); } - public boolean sendWelcome(String username,String email){ - return sendMail("QUINN-注册成功", - username + "您好,欢迎使用!",email); + public boolean sendParamsMail(EmailType emailType, String email, Map map){ + return true; } private boolean sendMail(String subject,String content,String toEmail){ @@ -60,6 +74,7 @@ public enum SendBMail { log.error("发送邮件失败",e); return false; } + log.info("发送邮件成功"+toEmail); return true; } diff --git a/src/main/java/com/quinn/mapper/EmailMapper.java b/src/main/java/com/quinn/mapper/EmailMapper.java new file mode 100644 index 0000000..96d9a44 --- /dev/null +++ b/src/main/java/com/quinn/mapper/EmailMapper.java @@ -0,0 +1,16 @@ +package com.quinn.mapper; + +import com.quinn.pojo.Email; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author limqsh + * @since 2022-05-15 + */ +public interface EmailMapper extends BaseMapper { + +} diff --git a/src/main/java/com/quinn/mapper/xml/EmailMapper.xml b/src/main/java/com/quinn/mapper/xml/EmailMapper.xml new file mode 100644 index 0000000..1cde8c7 --- /dev/null +++ b/src/main/java/com/quinn/mapper/xml/EmailMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/com/quinn/pojo/Email.java b/src/main/java/com/quinn/pojo/Email.java new file mode 100644 index 0000000..667bf90 --- /dev/null +++ b/src/main/java/com/quinn/pojo/Email.java @@ -0,0 +1,48 @@ +package com.quinn.pojo; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import java.util.Date; +import com.baomidou.mybatisplus.annotation.TableId; +import java.io.Serializable; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + *

+ * + *

+ * + * @author limqsh + * @since 2022-05-15 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("qn_email") +@ApiModel(value="Email对象", description="") +public class Email implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "唯一id") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "类型") + private String type; + + @ApiModelProperty(value = "标题") + private String title; + + @ApiModelProperty(value = "内容") + private String content; + + @ApiModelProperty(value = "时间") + private Date gmtCreate; + + +} diff --git a/src/main/java/com/quinn/service/EmailService.java b/src/main/java/com/quinn/service/EmailService.java new file mode 100644 index 0000000..0122e71 --- /dev/null +++ b/src/main/java/com/quinn/service/EmailService.java @@ -0,0 +1,16 @@ +package com.quinn.service; + +import com.quinn.pojo.Email; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author limqsh + * @since 2022-05-15 + */ +public interface EmailService extends IService { + +} diff --git a/src/main/java/com/quinn/service/impl/EmailServiceImpl.java b/src/main/java/com/quinn/service/impl/EmailServiceImpl.java new file mode 100644 index 0000000..1f919b1 --- /dev/null +++ b/src/main/java/com/quinn/service/impl/EmailServiceImpl.java @@ -0,0 +1,20 @@ +package com.quinn.service.impl; + +import com.quinn.pojo.Email; +import com.quinn.mapper.EmailMapper; +import com.quinn.service.EmailService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author limqsh + * @since 2022-05-15 + */ +@Service +public class EmailServiceImpl extends ServiceImpl implements EmailService { + +} diff --git a/src/main/java/com/quinn/task/SendAsyncEmail.java b/src/main/java/com/quinn/task/SendAsyncEmail.java index 75e5cd6..414a4c8 100644 --- a/src/main/java/com/quinn/task/SendAsyncEmail.java +++ b/src/main/java/com/quinn/task/SendAsyncEmail.java @@ -1,6 +1,8 @@ package com.quinn.task; +import com.quinn.common.EmailType; import com.quinn.intergration.SendBMail; +import com.quinn.utils.SpringUtils; import lombok.Data; @Data @@ -17,6 +19,7 @@ public class SendAsyncEmail implements Runnable{ @Override public void run() { - SendBMail.INSTANCE.sendWelcome(username,email); + SendBMail sendBMail = SpringUtils.getBean(SendBMail.class); + sendBMail.sendOneParamMail(EmailType.SUCCESS,username,email); } } diff --git a/src/main/java/com/quinn/utils/SpringUtils.java b/src/main/java/com/quinn/utils/SpringUtils.java new file mode 100644 index 0000000..c3dc890 --- /dev/null +++ b/src/main/java/com/quinn/utils/SpringUtils.java @@ -0,0 +1,34 @@ +package com.quinn.utils; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +@Component +public class SpringUtils implements ApplicationContextAware { + + private static ApplicationContext applicationContext; + + /** + * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型. + */ + public static T getBean(Class tClass) { + return getApplicationContext().getBean(tClass); + } + + public static T getBean(String name,Class tClass) { + return getApplicationContext().getBean(name,tClass); + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + if (SpringUtils.applicationContext == null){ + SpringUtils.applicationContext = applicationContext; + } + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } +} diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index bc9016a..d6e8997 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -17,6 +17,7 @@ background: url(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAIAAAAmkwkpAAAAHklEQVQImWNkYGBgYGD4//8/A5wF5SBYyAr+//8PAPOCFO0Q2zq7AAAAAElFTkSuQmCC) repeat;text-shadow: 5px -5px black, 4px -4px white;font-weight: bold;-webkit-text-fill-color: transparent;-webkit-background-clip: text } .invertedContent p{ + text-align: center; background: url(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAIAAAAmkwkpAAAAHklEQVQImWNkYGBgYGD4//8/A5wF5SBYyAr+//8PAPOCFO0Q2zq7AAAAAElFTkSuQmCC) repeat;text-shadow: 2px -2px black, 1px -1px white;font-weight: bold;-webkit-text-fill-color: transparent;-webkit-background-clip: text } #fastLink{ @@ -30,7 +31,20 @@
-

Quinn

+

+ + + + + QUINN + + + + +

+

+ 私人博客平台 +


欢迎访问

@@ -41,7 +55,8 @@

戳下方了解详情↓↓↓

diff --git a/src/main/resources/templates/model.html b/src/main/resources/templates/model.html new file mode 100644 index 0000000..9a949aa --- /dev/null +++ b/src/main/resources/templates/model.html @@ -0,0 +1,108 @@ + + + + + + +
+
+ + + + + + + + + + + +
+

+ + + + + QUINN + + + + +

+

+ 私人博客平台 +

+
+ +

+ 注册成功 +

+

+ 尊敬的#!!#,您好!您已经注册成功,欢迎使用您的专属个人博客平台。 +

+ + 访问 + +
+
+ + +
+ + +

感谢! © Quinn

+ + + + diff --git a/src/main/resources/templates/register.html b/src/main/resources/templates/register.html index d741d1e..ad89625 100644 --- a/src/main/resources/templates/register.html +++ b/src/main/resources/templates/register.html @@ -38,7 +38,7 @@
- +

已有账号?去登录

@@ -85,12 +85,14 @@ layer.open({ content: '注册码格式不正确', skin: 'msg', time: 2 }); return; } + console.log(123); $.ajax({ url: "/checkRegister", async: false, type: "post", data: {"username":username,"password":password,"repassword":repassword,"email":email,"code":code}, success: function (data) { + console.log(data); if(data == 'ok'){ this.disabled = true; $('#registerForm').submit(); diff --git a/src/test/java/com/quinn/test/RedisTest.java b/src/test/java/com/quinn/test/RedisTest.java index 345adcc..660ab70 100644 --- a/src/test/java/com/quinn/test/RedisTest.java +++ b/src/test/java/com/quinn/test/RedisTest.java @@ -1,7 +1,9 @@ package com.quinn.test; import com.quinn.QuinnApplication; +import com.quinn.common.EmailType; import com.quinn.common.QuinnConstant; +import com.quinn.intergration.SendBMail; import com.quinn.pojo.Source; import com.quinn.service.SourceService; import com.quinn.utils.RedisUtils; @@ -25,14 +27,17 @@ public class RedisTest { @Resource RedisUtils redisUtils; + @Resource + SendBMail sendBMail; + @Test public void updateViewTask(){ } @Test - public void setTestKey(){ - + public void sendEmail(){ + sendBMail.sendOneParamMail(EmailType.SUCCESS,"1234","540344226@qq.com"); } }