装饰工程施工工艺流程seo是什么服务器
- 作者: 五速梦信息网
- 时间: 2026年04月20日 05:02
当前位置: 首页 > news >正文
装饰工程施工工艺流程,seo是什么服务器,专业北京网站建设公司排名,自己做的网站可以查看谁访问吗目录
一、发送短信
1 短信服务介绍
2 阿里云短信服务#xff08;个人现在不太好申请了#xff09;
2.1 介绍 2.2 注册账号
2.3 设置短信签名
2.4 设置短信模版 2.5 设置AccessKey
3 代码开发
3.1 导包 3.2 短信发送工具类SMSUtils
二、手机验证码登录
1 需求分析 …目录
一、发送短信
1 短信服务介绍
2 阿里云短信服务个人现在不太好申请了
2.1 介绍 2.2 注册账号
2.3 设置短信签名
2.4 设置短信模版 2.5 设置AccessKey
3 代码开发
3.1 导包 3.2 短信发送工具类SMSUtils
二、手机验证码登录
1 需求分析
2 数据模型
3 代码开发
3.1 实体类User 3.2 Mapper接口UserMapper
3.3 业务层接口 UserService
3.4 业务层实现类 UserServiceImpl
3.5 控制层 UserController
3.6 工具类ValidateCodeUtils
3.7 修改LoginCheckFilter
3.8 控制层 UserController 代码实现
4 功能测试 前言发送短信和手机验证码登录 一、发送短信
1 短信服务介绍 2 阿里云短信服务个人现在不太好申请了
2.1 介绍 2.2 注册账号 2.3 设置短信签名 2.4 设置短信模版 2.5 设置AccessKey 3 代码开发 3.1 导包 !–阿里云短信服务–dependencygroupIdcom.aliyun/groupIdartifactIdaliyun-java-sdk-core/artifactIdversion4.5.16/version/dependencydependencygroupIdcom.aliyun/groupIdartifactIdaliyun-java-sdk-dysmsapi/artifactIdversion2.1.0/version/dependency 3.2 短信发送工具类SMSUtils package com.runa.reggie.utils;import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;/*** 短信发送工具类/
public class SMSUtils {/** 发送短信* param signName 签名* param templateCode 模板* param phoneNumbers 手机号* param param 参数/public static void sendMessage(String signName, String templateCode,String phoneNumbers,String param){DefaultProfile profile DefaultProfile.getProfile(cn-hangzhou, , );IAcsClient client new DefaultAcsClient(profile);SendSmsRequest request new SendSmsRequest();request.setSysRegionId(cn-hangzhou);request.setPhoneNumbers(phoneNumbers);request.setSignName(signName);request.setTemplateCode(templateCode);request.setTemplateParam({\code:\param});try {SendSmsResponse response client.getAcsResponse(request);System.out.println(短信发送成功);}catch (ClientException e) {e.printStackTrace();}}}二、手机验证码登录
1 需求分析 2 数据模型 3 代码开发 3.1 实体类User
package com.runa.reggie.entity;import lombok.Data;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
/** 用户信息/
Data
public class User implements Serializable {private static final long serialVersionUID 1L;private Long id;//姓名private String name;//手机号private String phone;//性别 0 女 1 男private String sex;//身份证号private String idNumber;//头像private String avatar;//状态 0:禁用1:正常private Integer status;
}3.2 Mapper接口UserMapper
package com.runa.reggie.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.runa.reggie.entity.User;
import org.apache.ibatis.annotations.Mapper;Mapper
public interface UserMapper extends BaseMapperUser{
}3.3 业务层接口 UserService
package com.runa.reggie.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.runa.reggie.entity.Employee;
import com.runa.reggie.entity.User;public interface UserService extends IServiceUser {
}3.4 业务层实现类 UserServiceImpl
package com.runa.reggie.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.runa.reggie.entity.User;
import com.runa.reggie.mapper.UserMapper;
import com.runa.reggie.service.UserService;
import org.springframework.stereotype.Service;Service
public class UserServiceImpl extends ServiceImplUserMapper,User implements UserService{
}3.5 控制层 UserController
package com.runa.reggie.controller;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.runa.reggie.common.R;
import com.runa.reggie.entity.User;
import com.runa.reggie.service.UserService;
import com.runa.reggie.utils.SMSUtils;
import com.runa.reggie.utils.ValidateCodeUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpSession;
import java.util.Map;RestController
RequestMapping(/user)
Slf4j
public class UserController {Autowiredprivate UserService userService;}3.6 工具类ValidateCodeUtils
package com.runa.reggie.utils;import java.util.Random;/** 随机生成验证码工具类/
public class ValidateCodeUtils {/** 随机生成验证码* param length 长度为4位或者6位* return/public static Integer generateValidateCode(int length){Integer code null;if(length 4){code new Random().nextInt(9999);//生成随机数最大为9999if(code 1000){code code 1000;//保证随机数为4位数字}}else if(length 6){code new Random().nextInt(999999);//生成随机数最大为999999if(code 100000){code code 100000;//保证随机数为6位数字}}else{throw new RuntimeException(只能生成4位或6位数字验证码);}return code;}/** 随机生成指定长度字符串验证码* param length 长度* return/public static String generateValidateCode4String(int length){Random rdm new Random();String hash1 Integer.toHexString(rdm.nextInt());String capstr hash1.substring(0, length);return capstr;}
}3.7 修改LoginCheckFilter package com.runa.reggie.filter;import com.alibaba.fastjson.JSON;
import com.runa.reggie.common.BaseContext;
import com.runa.reggie.common.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.AntPathMatcher;import javax.servlet.;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;Slf4j
WebFilter(filterName loginCheckFilter, urlPatterns /)
public class LoginCheckFilter implements Filter {// 路径匹配器public static final AntPathMatcher PATH_MATCHER new AntPathMatcher();Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request (HttpServletRequest) servletRequest;HttpServletResponse response (HttpServletResponse) servletResponse;// 1 获取本次请求的URI// request.getRequestURL()返回的是全路径。// request.getRequestURI()返回的是除去协议域名IP端口号之后的路由部分。String requestURI request.getRequestURI();log.info(拦截到请求【{}】,requestURI);// 定义一些不需要处理的路径String[] urls new String[]{/employee/login, // 登录不需要/employee/logout,/backend/,/front/,/common/,/user/sendMsg, //移动端发送短信/user/login //移动端登录};// 2 判断本次请求是否需要处理boolean check check(urls, requestURI);// 3 如果不需要处理,则直接放行if(check){log.info(本次请求【 {} 】 不需要处理,requestURI);filterChain.doFilter(request,response);return;}// 4 -1员工端 判断登录状态如果已登录则直接放行if(request.getSession().getAttribute(employee) ! null){log.info(用户已登录请求url为【{}】, 用户id为:【 {} 】 ,requestURI,request.getSession().getAttribute(employee));// 获取ID 塞进线程Long empId (Long) request.getSession().getAttribute(employee);BaseContext.setCurrentId(empId);filterChain.doFilter(request,response);return;}// 4 -2移动端 判断登录状态如果已登录则直接放行if(request.getSession().getAttribute(user) ! null){log.info(用户已登录请求url为【{}】, 用户id为:【 {} 】 ,requestURI,request.getSession().getAttribute(user));// 获取ID 塞进线程Long userId (Long) request.getSession().getAttribute(user);BaseContext.setCurrentId(userId);filterChain.doFilter(request,response);return;}log.info(用户未登录);// 5 如果未登录则返回未登录结果通过输出流方式向客户端页面响应数据response.getWriter().write(JSON.toJSONString(R.error(NOTLOGIN)));return;}/ 路径匹配检查本次请求是否需要放行* param urls* param requestURI* return/public boolean check(String[] urls, String requestURI){for (String url : urls) {boolean match PATH_MATCHER.match(url, requestURI);if(match){return true;}}// 循环都匹配不上就返回falsereturn false;}
}登录手机页面
http://localhost:8080/front/page/login.html 3.8 控制层 UserController 代码实现
package com.runa.reggie.controller;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.runa.reggie.common.R;
import com.runa.reggie.entity.User;
import com.runa.reggie.service.UserService;
import com.runa.reggie.utils.SMSUtils;
import com.runa.reggie.utils.ValidateCodeUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpSession;
import java.util.Map;RestController
RequestMapping(/user)
Slf4j
public class UserController {Autowiredprivate UserService userService;/** 发送手机短信验证码* param user* return/PostMapping(/sendMsg)public RString sendMsg(RequestBody User user, HttpSession session){//获取手机号String phone user.getPhone();if(StringUtils.isNotEmpty(phone)){//生成随机的4位验证码String code ValidateCodeUtils.generateValidateCode(4).toString();log.info(code{},code);//调用阿里云提供的短信服务API完成发送短信//SMSUtils.sendMessage(菠菜,,phone,code);//需要将生成的验证码保存到Sessionsession.setAttribute(phone,code);return R.success(手机验证码短信发送成功);}return R.error(短信发送失败);}/** 移动端用户登录* param map* param session* return*/PostMapping(/login)public RUser login(RequestBody Map map, HttpSession session){log.info(map.toString());//获取手机号String phone map.get(phone).toString();//获取验证码String code map.get(code).toString();//从Session中获取保存的验证码Object codeInSession session.getAttribute(phone);//进行验证码的比对页面提交的验证码和Session中保存的验证码比对if(codeInSession ! null codeInSession.equals(code)){//如果能够比对成功说明登录成功LambdaQueryWrapperUser queryWrapper new LambdaQueryWrapper();queryWrapper.eq(User::getPhone,phone);User user userService.getOne(queryWrapper);if(user null){//判断当前手机号对应的用户是否为新用户如果是新用户就自动完成注册user new User();user.setPhone(phone);user.setStatus(1);userService.save(user);}session.setAttribute(user,user.getId());return R.success(user);}return R.error(登录失败);}}4 功能测试 http://localhost:8080/front/page/login.html
- 上一篇: 庄河建网站苏州建设工程材料信息价
- 下一篇: 装饰公司手机网站建设全网关键词搜索排行
相关文章
-
庄河建网站苏州建设工程材料信息价
庄河建网站苏州建设工程材料信息价
- 技术栈
- 2026年04月20日
-
撰写网站建设技术解决方案黄页网推广服务
撰写网站建设技术解决方案黄页网推广服务
- 技术栈
- 2026年04月20日
-
赚钱的十大个人网站淘宝客的wordpress模板
赚钱的十大个人网站淘宝客的wordpress模板
- 技术栈
- 2026年04月20日
-
装饰公司手机网站建设全网关键词搜索排行
装饰公司手机网站建设全网关键词搜索排行
- 技术栈
- 2026年04月20日
-
装饰公司网站建站网站建设 力洋网络
装饰公司网站建站网站建设 力洋网络
- 技术栈
- 2026年04月20日
-
装饰公司为什么做网站建设一个网站成本多少钱
装饰公司为什么做网站建设一个网站成本多少钱
- 技术栈
- 2026年04月20日
