一.在 l 中 加入 <!--email依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>二。创建一个用户实体
三.配置文件/*** .*/ @Data @Entity @NoArgsConstructor @AllArgsConstructor @RequiredArgsConstructor public class Member implements Serializable {@Id@GenericGenerator(name = "sys_uid",strategy = "com.zhaihuilin.util.KeyGeneratorUtils",parameters = {@Parameter(name = "k",value = "M")})@GeneratedValue(generator = "sys_uid")private String id;//用户名@NonNullprivate String username;//昵称private String nickname;@NonNull//密码private String password;@NonNull//邮箱private String email;//电话号码private String smscode;//用户状态private String state;public Member( String username, String nickname, String password, String email, String smscode, String state) {this.username = username;this.nickname = nickname;this.password = ail = email;this.smscode = smscode;this.state = state;}public Member(String username, String nickname, String password, String email, String state) {this.username = username;this.nickname = nickname;this.password = ail = email;this.state = state;} }
l
lspring:jpa:show-sql: truehibernate:ddl-auto: updatedatasource:url: jdbc:mysql://127.0.0.1:3306/sms?characterEncoding=UTF-8username: rootpassword: rootdriver-class-name: sql.jdbc.DriverminIdle: 2maxAction: 20maxWaitMillis: 8000cache:type: redisredis:database: 2host: 127.0.0.1port: 6379timeout: 20000pool:max-active: 8min-idle: 0max-idle: 8max-wait: -1
四。编写相应的 dao service [此处省略]server:tomcat:uri-encoding: utf-8port: 8087context-path: / spring:profiles:active: devmail:host: smtp.163username: 邮箱 password: 邮箱的登录密码port: 25default-encoding: UTF-8protocol: smtpproperties:mail:smth:auth: truestarttls:enable: truerequired: true
五。编写工具类
//实体类主键生成策略
public class KeyGeneratorUtils extends AbstractUUIDGenerator implements Configurable {public String k;@Overridepublic void configure(Type type, Properties properties, ServiceRegistry serviceRegistry) throws MappingException {k = Property("k");}@Overridepublic Serializable generate(SessionImplementor sessionImplementor, Object o) throws HibernateException {SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS");return k + simpleDateFormat.format(new Date());} }
//时间处理类
public class NormalTools {public static String getFileType(String fileName) {if(fileName!=null && fileName.indexOf(".")>=0) {return fileName.substring(fileName.lastIndexOf("."), fileName.length());}return "";}/*** 判断文件是否为图片文件* @param fileName* @return*/public static Boolean isImageFile(String fileName) {String [] img_type = new String[]{".jpg", ".jpeg", ".png", ".gif", ".bmp"};if(fileName==null) {return false;}fileName = LowerCase();for(String type : img_type) {dsWith(type)) {return true;}}return false;}public static String curDate(String pattern) {SimpleDateFormat sdf = new SimpleDateFormat(pattern);return sdf.format(new Date());}public static String curDate() {return curDate("yyyy-MM-dd HH:mm:ss");} } //随机生成6位数 public class RandomTools {/** 随机6位数 */public static String randomCode() {Integer res = (int)(Math.random()*1000000);return res+"";} } //加密 解密 public class SecurityUtil {public static String md5(String password) throws NoSuchAlgorithmException {MessageDigest md = Instance("MD5");md.Bytes());return new BigInteger(1,md.digest()).toString(16);}public static String md5(String username,String password) throws NoSuchAlgorithmException {MessageDigest md = Instance("MD5");md.Bytes());md.Bytes());return new BigInteger(1,md.digest()).toString(16);} }
//非空判断 public class StringUtils {public static boolean isNotEmpty(String str){if(str != null && im().length() != 0){return true;}return false;} } //邮件发送工具 @Component public class SendEmailUtils {@Autowiredprivate JavaMailSender javaMailSender; //注入 javaMailSender@Value("${spring.mail.username}")private String username; // 发送邮件者 邮箱 【谁发的】/*** 发送邮件* @param title 标题* @param titleWithName 是否在标题后添加 名称* @param content 内容* @param contentWithName 是否在内容后添加 名称* @param email 接收者的邮箱【注册人】*/private void sendNormalEmail(String title,boolean titleWithName,String content, boolean contentWithName, String email ){String dName="个人博客";MimeMessage mimeMessage=null;try {mimeMessage= ateMimeMessage();//创建要发送的信息MimeMessageHelper helper=new MimeMessageHelper(mimeMessage,true);helper.setFrom(new InternetAddress(username,dName,"UTF-8")); //设置 谁发送的helper.setTo(email);//发给谁 【接收者的邮箱】title= titleWithName?title +"-"+dName:title; //标题内容helper.setSubject(title);//发送邮件的辩题if(contentWithName) {content += "<p style='text-align:right'>" +dName+ "</p>";content += "<p style='text-align:right'>" + NormalTools.curDate("yyyy-MM-dd HH:mm:ss")+ "</p>";}helper.setText(content,true);//发送的内容 是否为html}catch (Exception e){e.printStackTrace();}javaMailSender.send(mimeMessage);}/*** 发送 注册时的验证码* @param email 接收者的邮箱【注册人】* @param code 验证码*/public void sendRegisterCode(final String email, String code){final StringBuffer sb= new StringBuffer();//实例化一个StringBuffersb.append("<h2>"+email+",您好!<h2>").append("<p style='color:red'>此次注册的验证码是:"+code+"</p>");new Thread(new Runnable() {@Overridepublic void run() {sendNormalEmail("验证码", true, sb.toString(), true, email);}}).start();}/*** 注册成功时的提示邮件* @param email 接收的邮箱地址 【注册人】* @param pwd 初始密码* @param url 登陆地址*/public void sendRegisterSuc(final String email, String pwd, String url) {final StringBuffer sb = new StringBuffer();sb.append("<h3>恭喜您,注册成功!</h3>").append("<h2>初始化密码是:<b style='color:#F00'>").append(pwd).append("</b>,请不要告诉任何人!</h2>").append("请及时<a href='").append(url).append("'>登陆网站</a>修改密码。");new Thread(new Runnable() {@Overridepublic void run() {sendNormalEmail("注册成功", true, sb.toString(), true, email);}}).start();}/*** 注册成功时的提示邮件* @param email 接收的邮箱地址 【注册人】* @param pwd 初始密码* @param url 登陆地址*/public void sendFindPwdSuc(final String email, String pwd, String url) {final StringBuffer sb = new StringBuffer();sb.append("<h3>恭喜您,密码找回成功!</h3>").append("<h2>系统随机密码是:<b style='color:#F00'>").append(pwd).append("</b>,请不要告诉任何人!</h2>").append("请及时<a href='").append(url).append("'>登陆网站</a>修改密码。");new Thread(new Runnable() {@Overridepublic void run() {sendNormalEmail("成功找回密码", true, sb.toString(), true, email);}}).start();}/*** 新用户注册通过* @param email 接收邮箱地址(管理员的)* @param nickname 注册人姓名* @param regEmail 注册人邮箱* @param url 地址*/public void sendOnRegister(final String email, String nickname, String regEmail, String url) {final StringBuffer sb = new StringBuffer();sb.append("<a href='").append(url).append("'><h1>姓名:").append(nickname).append("</h1></a>");sb.append("<h3>注册邮箱:").append(regEmail).append("</h3>");new Thread(new Runnable() {@Overridepublic void run() {sendNormalEmail("新用户注册通知", true, sb.toString(), true, email);}}).start();} }
六.编写 配置类
@Configuration public class EmailConfig {@Value("localhost:8080/member/updatePwd")public String URL;//管理员邮箱 此处随便写一个邮箱@Value("111@qq")public String MEMEMAIL; }
七.编写 controller
@RestController @Log4j @RequestMapping(value = "/member") public class MemberController {@Autowiredprivate MemberService memberService;@Autowiredprivate SendEmailUtils sendEmailUtils;@Autowiredprivate EmailConfig emailConfig;/*** 发送邮箱验证码* @param email 接收者的邮箱 【注册人】* @param request* @return*/@RequestMapping(value = "/sendCode")public String sendCode(@RequestParam(value = "email",defaultValue = "",required = true) String email,HttpServletRequest request ){try {String code =RandomTools.randomCode();//产生随机的验证码Session().setAttribute("registerCode",code);//发送邮件开始 发送验证码log.info("开始发送邮件验证码------");sendEmailUtils.sendRegisterCode(email,code);}catch (Exception e){e.printStackTrace();return "0";}return "1";}@RequestMapping(value = "/register")public ReturnMessages register(@RequestParam(value = "email",defaultValue = "",required = true) String email,@RequestParam(value = "username",defaultValue = "",required = true) String username,@RequestParam(value = "nickname",defaultValue = "",required = false) String nickname,@RequestParam(value = "smscode",defaultValue = "",required = false) String smscode,@RequestParam(value = "code",defaultValue = "",required = true) String code,HttpServletRequest request){ReturnMessages returnMessages=null;if (!StringUtils.isNotEmpty(email)){return new ReturnMessages(RequestState.ERROR,"邮箱不能为空!",null);}if (!StringUtils.isNotEmpty(username)){return new ReturnMessages(RequestState.ERROR,"用户名不能为空!",null);}if (istMemberByemail(email)){return new ReturnMessages(RequestState.ERROR,"邮箱已存在!",null);}if (istMemberByusername(username)){return new ReturnMessages(RequestState.ERROR,"用户名已存在!",null);}if (!StringUtils.isNotEmpty(code)){return new ReturnMessages(RequestState.ERROR,"验证码不能为空!",null);}// 此处测试的时候 无法获取到 session 值 // String registerCode = (String) Session().getAttribute("registerCode"); // if (!registerCode.equals(code)){ // return new ReturnMessages(RequestState.ERROR,"验证码输入不正确!",null); // }String pwd = RandomTools.randomCode(); //随机密码try {Member member=new Member();member.setEmail(email);member.setNickname(nickname);member.setState(StateConstant.USER_STATE_String());member.setUsername(username);member.setPassword(SecurityUtil.md5(email,pwd));member=memberService.saveMember(member);if (member !=null){//注册成功后 通知注册人sendEmailUtils.sendRegisterSuc(email,pwd, emailConfig.URL+"?username="+username+"&code="+pwd);//注册成功后//注册成功后 通知管理员sendEmailUtils.sendOnRegister(emailConfig.MEMEMAIL,username,email,"#");//注册成功后return new ReturnMessages(RequestState.SUCCESS,"注册成功!",member);}else{return new ReturnMessages(RequestState.ERROR,"注册失败!",null);}} catch (Exception e) {return new ReturnMessages(RequestState.ERROR,"注册失败!",null);}}/*** 修改密码* @param code 初始密码* @param newPassword 新密码* @param request* @return*/@RequestMapping(value = "/updatePwd")public ReturnMessages updatePwd(@RequestParam(value = "code",defaultValue = "",required = true) String code,@RequestParam(value = "username",defaultValue = "",required = true) String username,@RequestParam(value = "newPassword",defaultValue = "",required = true) String newPassword,HttpServletRequest request){ReturnMessages returnMessages=null;if (!StringUtils.isNotEmpty(code)){return new ReturnMessages(RequestState.ERROR,"初始密码不能为空!",null);}if (!StringUtils.isNotEmpty(newPassword)){return new ReturnMessages(RequestState.ERROR,"新密码不能为空!",null);}Member member = memberService.findMemberByusername(username);if (member ==null){return new ReturnMessages(RequestState.ERROR,"该用户不存在!",null);}try {if ( StringUtils.isNotEmpty(code) && StringUtils.isNotEmpty(newPassword)){member.setPassword(SecurityUtil.Email(),newPassword));member=memberService.updateMember(member);if (member !=null){return new ReturnMessages(RequestState.SUCCESS,"修改密码成功!",member);}else{return new ReturnMessages(RequestState.ERROR,"修改密码失败!",null);}}else{return new ReturnMessages(RequestState.ERROR,"修改密码失败!",null);}}catch (Exception e){return new ReturnMessages(RequestState.ERROR,"修改密码失败!",null);}}/*** 找回密码* @param email 用户邮箱* @param request* @return*/@RequestMapping(value ="/findPwd")public ReturnMessages findPwd(@RequestParam(value = "email",defaultValue = "",required = true) String email,HttpServletRequest request){ReturnMessages returnMessages=null;if (!StringUtils.isNotEmpty(email)){return new ReturnMessages(RequestState.ERROR,"邮箱不能为空!",null);}Member member= memberService.findMemeberByemail(email);if (member ==null){return new ReturnMessages(RequestState.ERROR,"该用户不存在!",null);}try {String url="http:192.168.0.17:8080/member/login";String randPwd = RandomTools.randomCode();//随机产生一个密码member.setPassword(SecurityUtil.md5(email,randPwd));member=memberService.updateMember(member);//发送邮件通知 用户sendEmailUtils.sendFindPwdSuc(email,randPwd,url);return new ReturnMessages(RequestState.SUCCESS,"找回密码成功!",member);}catch (Exception e){return new ReturnMessages(RequestState.ERROR,"找回密码失败!",null);}}/*** 登录* @param email 邮箱* @param password 密码* @param request* @return*/@RequestMapping(value = "/login")public ReturnMessages login(@RequestParam(value = "email",defaultValue = "",required = true) String email,@RequestParam(value = "password",defaultValue = "",required = true) String password,HttpServletRequest request){ReturnMessages returnMessages=null;try {if (!StringUtils.isNotEmpty(email)){return new ReturnMessages(RequestState.ERROR,"邮箱不能为空!",null);}if (!StringUtils.isNotEmpty(password)){return new ReturnMessages(RequestState.ERROR,"密码不能为空!",null);}Member member=memberService.findMemeberByemail(email);if (member== null){return new ReturnMessages(RequestState.ERROR,"用户不存在!",null);}String pwd=SecurityUtil.md5(email,password);if (Password().equals(pwd)){return new ReturnMessages(RequestState.SUCCESS,"登录成功!",null);}else{return new ReturnMessages(RequestState.ERROR,"密码错误,登录失败!",null);}}catch (Exception e){e.printStackTrace();return new ReturnMessages(RequestState.ERROR,"登录失败!",null);}}}
本文发布于:2024-01-27 22:14:38,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063649052951.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |