日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 实现邮箱验证

發布時間:2023/12/31 java 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 实现邮箱验证 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.Java實現用戶注冊,郵箱驗證碼激活的核心代碼:

1.1 在RegisterServlet 用戶注冊類中

public class RegisterServlet extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String userName=request.getParameter("username");String password=request.getParameter("password");String email=request.getParameter("email");System.out.println(userName+" "+password+" "+email);UserService userService=new UserServiceImpl();if(userService.doRegister(userName,password,email)){request.setAttribute("msg", "注冊成功,請登錄郵箱激活賬號");}else{request.setAttribute("msg", "注冊失敗,請檢查相關信息");}request.getRequestDispatcher("/result.jsp").forward(request, response);} }

1.2 在ActiveServlet 郵箱驗證中:

public class ActiveServlet extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String code=request.getParameter("code");UserService userService=new UserServiceImpl();if(userService.activeUser(code)){request.getRequestDispatcher("/welcome.jsp").forward(request, response);}else{request.getRequestDispatcher("/fail.jsp").forward(request, response);}}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);} }

1.3 在UserService中

public interface UserService {boolean doRegister(String userName, String password, String email);boolean activeUser(String code); }

1.4 在UserServiceImpl中

public class UserServiceImpl implements UserService {public boolean doRegister(String userName, String password, String email) {// 這里可以驗證各字段是否為空//利用正則表達式(可改進)驗證郵箱是否符合郵箱的格式if(!email.matches("^\\w+@(\\w+\\.)+\\w+$")){return false;}//生成激活碼String code=CodeUtil.generateUniqueCode();User user=new User(userName,email,password,0,code);//將用戶保存到數據庫UserDao userDao=new UserDaoImpl();//保存成功則通過線程的方式給用戶發送一封郵件if(userDao.save(user)>0){new Thread(new MailUtil(email, code)).start();;return true;}return false;}public boolean activeUser(String code) {UserDao userDao=new UserDaoImpl();if(userDao.activeUser(code)>0){return true;}else{return false;}} }

1.5 在UserDao中

public interface UserDao {int save(User user);int activeUser(String code); }

1.6 在UserDaoImpl中

public class UserDaoImpl implements UserDao{public int save(User user) {int num=0;try {Connection conn=DBUtil.getConnection();String sql ="insert into user(username,email,password,state,code) values(?,?,?,?,?)";PreparedStatement pstmt=conn.prepareStatement(sql);pstmt.setString(1, user.getUserName());pstmt.setString(2, user.getEmail());pstmt.setString(3, user.getPassword());pstmt.setInt(4, user.getState());pstmt.setString(5, user.getCode());num=pstmt.executeUpdate();DBUtil.close(conn,pstmt, null);} catch (SQLException e) {e.printStackTrace();}return num;}public int activeUser(String code) {int num=0;try {Connection conn=DBUtil.getConnection();String sql="update user set state=1 where code=?";PreparedStatement pstmt=conn.prepareStatement(sql);pstmt.setString(1, code);num=pstmt.executeUpdate();DBUtil.close(conn,pstmt,null);} catch (SQLException e) {e.printStackTrace();}return num;} }

1.7 在CodeUtil中

public class CodeUtil {//生成唯一的激活碼public static String generateUniqueCode(){return UUID.randomUUID().toString().replaceAll("-", "");} }

1.8 在 MailUtils中

public class MailUtil implements Runnable {private String email;// 收件人郵箱private String code;// 激活碼public MailUtil(String email, String code) {this.email = email;this.code = code;}public void run() {// 1.創建連接對象javax.mail.Session// 2.創建郵件對象 javax.mail.Message// 3.發送一封激活郵件String from = "xxx@qq.com";// 發件人電子郵箱String host = "smtp.qq.com"; // 指定發送郵件的主機smtp.qq.com(QQ)|smtp.163.com(網易)Properties properties = System.getProperties();// 獲取系統屬性properties.setProperty("mail.smtp.host", host);// 設置郵件服務器properties.setProperty("mail.smtp.auth", "true");// 打開認證try {//QQ郵箱需要下面這段代碼,163郵箱不需要MailSSLSocketFactory sf = new MailSSLSocketFactory();sf.setTrustAllHosts(true);properties.put("mail.smtp.ssl.enable", "true");properties.put("mail.smtp.ssl.socketFactory", sf);// 1.獲取默認session對象Session session = Session.getDefaultInstance(properties, new Authenticator() {public PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication("xxx@qq.com", "xxx"); // 發件人郵箱賬號、授權碼}});// 2.創建郵件對象Message message = new MimeMessage(session);// 2.1設置發件人message.setFrom(new InternetAddress(from));// 2.2設置接收人message.addRecipient(Message.RecipientType.TO, new InternetAddress(email));// 2.3設置郵件主題message.setSubject("賬號激活");// 2.4設置郵件內容String content = "<html><head></head><body><h1>這是一封激活郵件,激活請點擊以下鏈接</h1><h3><a href='http://localhost:8080/RegisterDemo/ActiveServlet?code="+ code + "'>http://localhost:8080/RegisterDemo/ActiveServlet?code=" + code+ "</href></h3></body></html>";message.setContent(content, "text/html;charset=UTF-8");// 3.發送郵件Transport.send(message);System.out.println("郵件成功發送!");} catch (Exception e) {e.printStackTrace();}} }

1.9 在DBUtil中

public class DBUtil {private static ComboPooledDataSource cpds=null;static{cpds=new ComboPooledDataSource("mysql");}public static Connection getConnection(){Connection connection=null;try {connection = cpds.getConnection();} catch (SQLException e) {e.printStackTrace();}return connection;}public static void close(Connection conn,PreparedStatement pstmt,ResultSet rs){try {if(rs!=null){rs.close();}if(pstmt!=null){pstmt.close();}if(rs!=null){rs.close();}} catch (SQLException e) {e.printStackTrace();}} }

1.10 所用到數據庫表

create table `user`(id int(11) primary key auto_increment comment '用戶id',username varchar(255) not null comment '用戶名',email varchar(255) not null comment '用戶郵箱',password varchar(255) not null comment '用戶密碼',state int(1) not null default 0 comment '用戶激活狀態:0表示未激活,1表示激活',code varchar(255) not null comment '激活碼' )engine=InnoDB default charset=utf8;

?

? ? ?PS:若想通過代碼更好的理解Java發送郵件,請:https://github.com/luomingkui/RegisterDemo

?

2.Java實現用戶登錄郵箱驗證項目的核心代碼:

2.1 點擊獲取驗證碼,調用如下:

?????在AdminUserController中

//獲取驗證碼 @RequestMapping(value = "getVcode") @ResponseBody public Map<String, Object> getVcode(HttpServletRequest request) {String userName = request.getParameter("userName");Map<String , Object> map =new HashMap<String , Object>(4);String msg;try {String send=adminUserService.genSendVecode(userName);map.put("status", Constant.SUCCESS);map.put("msg", send);return map;} catch (Exception e) {if (e instanceof WlbException) {msg = e.getMessage();} else {msg = "管理系統異常,請稍候重試";}WlbManageLogger.e(">>>>>> loginIn action時異常,具體原因:%s", e.getLocalizedMessage()); e.printStackTrace();}map.put("status", Constant.ERROR);map.put("msg", msg);return map; }

2.2 在AdminUserService中:

@Service public class AdminUserService {@Autowiredprivate AdminUserDao adminUserDao;@Autowiredprivate AdminAuthDao adminAuthDao;private static String randString = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//隨機產生的字符串private static long expireTime = 24 * 60 * 60 * 1000;public static String generateVcode(String cellphone) {StringBuilder tmp = new StringBuilder();Random rand = new Random();for (int i = 0; i < 6; i++) {tmp.append(getRandomString(rand.nextInt(36)));}return tmp.toString();}public static String getRandomString(int num){return String.valueOf(randString.charAt(num));}/*** 郵箱發送驗證碼* @param userEmail* @return*/public String genSendVecode(String userEmail) {// 1. 校驗郵箱是否正確// 2. 校驗郵箱是否合法// 3. 生成驗證碼// 4. 將驗證碼發送至指定郵箱if (!RegexUtil.emailVerify(userEmail) || !userEmail.endsWith("@wolaibao.com") || !userEmail.endsWith("@zhongbao.email") ) {throw new WlbException("用戶賬戶錯誤,請重新輸入");}AdminUser adminUser = findAdminByAccount(userEmail);if (null == adminUser || StringUtils.isBlank(adminUser.getUsername())|| adminUser.getStatus()!=0) {throw new WlbException("用戶賬戶錯誤,請重新輸入");}AdminAuth lastAuth = adminAuthDao.selectLastVcode(userEmail);if (lastAuth != null && System.currentTimeMillis() - lastAuth.getUpdateTime().getTime() < (1 * 60 * 1000)) {throw new WlbException("驗證碼已經發送至郵箱請勿重復獲取");}String vcode;if (lastAuth == null || System.currentTimeMillis() - lastAuth.getExpireTime() > 0) {vcode = generateVcode(userEmail);AdminAuth adminAuth = new AdminAuth();adminAuth.setEmail(userEmail);adminAuth.setVcode(vcode);adminAuth.setExpireTime(System.currentTimeMillis() + expireTime);adminAuthDao.insert(adminAuth);} else {vcode = lastAuth.getVcode();adminAuthDao.update(lastAuth);}MsgService.sendMail(userEmail, "管理后臺登錄驗證", "管理后臺登錄驗證碼為:" + vcode + "\n有效期為24小時!");return "我有效期為24來保管理后臺登錄驗證已經發送至郵箱,小時,請注意保管驗證碼";}private AdminUser findAdminByAccount(String userEmail) {return adminUserDao.selectByAccount(userEmail);} }

2.3 在 MsgService 發送郵件接口中:

@Service public class MsgService { /*** 調用郵件發送接口* @param to* @param subject* @param content*/public static void sendMail(String to, String subject, String content) {try {NetRequest mailRequest = new NetRequest(ClientApiMethod.MSG_EMAIL).setMethod(RequestMethod.GET);Map<String, Object> params = new HashMap<>();params.put("to", to);params.put("content", content);params.put("subject", subject);mailRequest.setParams(params);String msgRsp = new HttpExecutor().execute(mailRequest, String.class);Loggers.MANAGE.debug("REQUEST email : ", to, "\nRESPONSE", msgRsp.trim());} catch (Exception e) {Loggers.MANAGE.error("SendMsg error: \n", e);}} }

2.4 在NetRequest中

public class NetRequest {/*** 請求方法*/private RequestMethod method = RequestMethod.GET;/*** 請求url*/private String path;/*** 標示*/private String tag;public NetRequest(String url) {this.path = url;this.tag = "request-" + hashCode();}public RequestMethod getMethod() {return method;}public NetRequest setMethod(RequestMethod method) {this.method = method;return this;}public String getUrl() {return path;}public NetRequest setUrl(String path) {this.path = path;return this;}public String getTag() {return tag;}public NetRequest setTag(String tag) {this.tag = tag;return this;}}

2.5 在ClientApiMethod中

public class ClientApiMethod { private static final String MSG_HOST = Config.getInstance().getHttpMsgHost();public static final String MSG_EMAIL = MSG_HOST + "/msg/email.json";public static final String MSG_EMAIL_HTML = MSG_HOST + "/msg/emailHtml.json";public static final String APL_NOTIFY = "/taskDistribution/taskDistributionManager.json"; }

2.6 在HttpExecutor中

public class HttpExecutor {public List<HttpTask> taskList = new ArrayList<HttpTask>();/*** 同步執行請求* @param netRequest 請求* @param cls 接口響應結果Class* @param <T>* @return*/public <T> T execute(NetRequest netRequest,Class<T> cls) {HttpTask httpTask = new HttpTask().setHttpParam(netRequest);taskList.add(httpTask);String responseData= httpTask.start();if(StrUtil.isBlank(responseData))return null;T response =null;try {response = netRequest.getDataParser().parseResponse(responseData, cls);} catch (Exception e) {e.printStackTrace();}return response;} }

?

?

總結

以上是生活随笔為你收集整理的Java 实现邮箱验证的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。