当前位置: 首页 > news >正文

网站登录到wordpress沈阳专业seo

网站登录到wordpress,沈阳专业seo,律师做几个网站,接做施工图的网站目录 一、User类 二、ThreadLocal类 三、用户业务逻辑接口 四、用户业务逻辑接口实现类 五、用户控制层 六、用户登录拦截器 七、拦截器配置类 八、隐藏敏感信息的代码调整 完整的项目资源共享地址,当中包含了代码、资源文件以及Nginx(Wi…

目录

一、User类

二、ThreadLocal类 

三、用户业务逻辑接口 

四、用户业务逻辑接口实现类 

五、用户控制层 

六、用户登录拦截器 

七、拦截器配置类 

八、隐藏敏感信息的代码调整 


完整的项目资源共享地址,当中包含了代码、资源文件以及Nginx(Windows版)和完整的配置:

链接:https://pan.quark.cn/s/5c28484d7882
提取码:cJxQ

其中对于短信登录这块代码已经做了优化,通过Redis实现短信验证码登录,想要按照Session方式进行登录来学习Session的短信验证码登录流程的,可以将工程相关代码按下述的代码进行修改调整。 

一、User类

package com.hmdp.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.time.LocalDateTime;@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("tb_user")
public class User implements Serializable {private static final long serialVersionUID = 1L;/*** 主键*/@TableId(value = "id", type = IdType.AUTO)private Long id;/*** 手机号码*/private String phone;/*** 密码,加密存储*/private String password;/*** 昵称,默认是随机字符*/private String nickName;/*** 用户头像*/private String icon = "";/*** 创建时间*/private LocalDateTime createTime;/*** 更新时间*/private LocalDateTime updateTime;}

二、ThreadLocal类 

package com.hmdp.utils;import com.hmdp.entity.User;public class UserHolder {private static final ThreadLocal<User> tl = new ThreadLocal<>();public static void saveUser(User user){tl.set(user);}public static User getUser(){return tl.get();}public static void removeUser(){tl.remove();}
}

三、用户业务逻辑接口 

package com.hmdp.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.hmdp.dto.LoginFormDTO;
import com.hmdp.dto.Result;
import com.hmdp.entity.User;import javax.servlet.http.HttpSession;public interface IUserService extends IService<User> {Result sendCode(String phone, HttpSession session);Result login(LoginFormDTO loginForm, HttpSession session);
}

四、用户业务逻辑接口实现类 

package com.hmdp.service.impl;import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hmdp.dto.LoginFormDTO;
import com.hmdp.dto.Result;
import com.hmdp.entity.User;
import com.hmdp.mapper.UserMapper;
import com.hmdp.service.IUserService;
import com.hmdp.utils.RegexUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import static com.hmdp.utils.SystemConstants.USER_NICK_NAME_PREFIX;@Slf4j
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {@Resourceprivate StringRedisTemplate stringRedisTemplate;@Overridepublic Result sendCode(String phone, HttpSession session) {// 1.校验手机号if (RegexUtils.isPhoneInvalid(phone)) {// 2.如果不符合,返回错误信息return Result.fail("手机号格式错误!");}// 3.符合,生成验证码String code = RandomUtil.randomNumbers(6);// 4.保存验证码到 sessionsession.setAttribute("code:" + phone, code);// 5.发送验证码log.debug("发送短信验证码成功,验证码:{}", code);// 返回okreturn Result.ok();}@Overridepublic Result login(LoginFormDTO loginForm, HttpSession session) {// 1.校验手机号String phone = loginForm.getPhone();if (RegexUtils.isPhoneInvalid(phone)) {// 2.如果不符合,返回错误信息return Result.fail("手机号格式错误!");}// 2. 校验验证码Object cacheCode = session.getAttribute("code:" + loginForm.getPhone());String code = loginForm.getCode();// 3. 不一致则报错if (cacheCode == null || !cacheCode.toString().equals(code)) {return Result.fail("验证码错误");}// 4. 一致,则根据手机号查询用户User user = query().eq("phone", phone).one();// 5. 判断用户是否存在if (user == null) {// 6. 不存在则创建用户并保存createUserWithPhone(phone);}// 7. 保存用户信息到session中session.setAttribute("user", user);// 8.返回tokenreturn Result.ok();}private User createUserWithPhone(String phone) {// 1.创建用户User user = new User();user.setPhone(phone);user.setNickName(USER_NICK_NAME_PREFIX + RandomUtil.randomString(10));// 2.保存用户save(user);return user;}
}

五、用户控制层 

package com.hmdp.controller;import com.hmdp.dto.Result;
import com.hmdp.service.IUserInfoService;
import com.hmdp.service.IUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {@Resourceprivate IUserService userService;/*** 发送手机验证码*/@PostMapping("code")public Result sendCode(@RequestParam("phone") String phone, HttpSession session) {// 发送短信验证码并保存验证码return userService.sendCode(phone, session);}/*** 登录功能* @param loginForm 登录参数,包含手机号、验证码;或者手机号、密码*/@PostMapping("/login")public Result login(@RequestBody LoginFormDTO loginForm, HttpSession session){// 实现登录功能return userService.login(loginForm, session);}@GetMapping("/me")public Result me(){// 获取当前登录的用户并返回User user = UserHolder.getUser();return Result.ok(user);}
}

六、用户登录拦截器 

package com.hmdp.utils;import com.hmdp.entity.User;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 1. 获取SessionHttpSession session = request.getSession();// 2. 获取session中的用户Object user = session.getAttribute("user");// 3. 判断用户是否存在if (user == null) {// 4. 不存在则拦截并返回401状态码response.setStatus(401);return false;}// 5. 存在则保存用户信息到ThreadLocalUserHolder.saveUser((User) user);return true;}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {// 移除用户UserHolder.removeUser();}
}

七、拦截器配置类 

package com.hmdp.config;import com.hmdp.utils.LoginInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class MvcConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {// 登录拦截器registry.addInterceptor(new LoginInterceptor()).excludePathPatterns("/shop/**","/voucher/**","/shop-type/**","/upload/**","/blog/hot","/user/code","/user/login");}
}

八、隐藏敏感信息的代码调整 

上述代码中存入Session中的用户信息涉及到了很多的敏感字段,如手机号、密码等,会有安全风险,所以对代码优化如下:

package com.hmdp.dto;import lombok.Data;@Data
public class UserDTO {private Long id;private String nickName;private String icon;
}
package com.hmdp.utils;import com.hmdp.dto.UserDTO;public class UserHolder {private static final ThreadLocal<UserDTO> tl = new ThreadLocal<>();public static void saveUser(UserDTO user){tl.set(user);}public static UserDTO getUser(){return tl.get();}public static void removeUser(){tl.remove();}
}
package com.hmdp.controller;import com.hmdp.dto.LoginFormDTO;
import com.hmdp.dto.Result;
import com.hmdp.dto.UserDTO;
import com.hmdp.service.IUserInfoService;
import com.hmdp.service.IUserService;
import com.hmdp.utils.UserHolder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {@Resourceprivate IUserService userService;@Resourceprivate IUserInfoService userInfoService;/*** 发送手机验证码*/@PostMapping("code")public Result sendCode(@RequestParam("phone") String phone, HttpSession session) {// 发送短信验证码并保存验证码return userService.sendCode(phone, session);}/*** 登录功能* @param loginForm 登录参数,包含手机号、验证码;或者手机号、密码*/@PostMapping("/login")public Result login(@RequestBody LoginFormDTO loginForm, HttpSession session){// 实现登录功能return userService.login(loginForm, session);}@GetMapping("/me")public Result me(){// 获取当前登录的用户并返回UserDTO user = UserHolder.getUser();return Result.ok(user);}
}
package com.hmdp.utils;import com.hmdp.dto.UserDTO;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 1. 获取SessionHttpSession session = request.getSession();// 2. 获取session中的用户Object user = session.getAttribute("user");// 3. 判断用户是否存在if (user == null) {// 4. 不存在则拦截并返回401状态码response.setStatus(401);return false;}// 5. 存在则保存用户信息到ThreadLocalUserHolder.saveUser((UserDTO) user);return true;}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {// 移除用户UserHolder.removeUser();}
}


文章转载自:
http://northwest.bnpn.cn
http://chairside.bnpn.cn
http://alcoholize.bnpn.cn
http://gruesome.bnpn.cn
http://armourial.bnpn.cn
http://jan.bnpn.cn
http://classroom.bnpn.cn
http://curricle.bnpn.cn
http://infrasonic.bnpn.cn
http://acquittance.bnpn.cn
http://metallogenetic.bnpn.cn
http://belladonna.bnpn.cn
http://landrail.bnpn.cn
http://incoherency.bnpn.cn
http://puzzler.bnpn.cn
http://nubian.bnpn.cn
http://cenozoology.bnpn.cn
http://cineol.bnpn.cn
http://csf.bnpn.cn
http://leonore.bnpn.cn
http://sciagram.bnpn.cn
http://vandalize.bnpn.cn
http://tabinet.bnpn.cn
http://prosperously.bnpn.cn
http://galvanometry.bnpn.cn
http://bicentric.bnpn.cn
http://aquatint.bnpn.cn
http://uncomprehended.bnpn.cn
http://disharmonious.bnpn.cn
http://swelldom.bnpn.cn
http://outyell.bnpn.cn
http://dichotomist.bnpn.cn
http://surprint.bnpn.cn
http://counterviolence.bnpn.cn
http://brayer.bnpn.cn
http://nebula.bnpn.cn
http://perbromate.bnpn.cn
http://quarterback.bnpn.cn
http://controlment.bnpn.cn
http://subnuclear.bnpn.cn
http://incineration.bnpn.cn
http://lutein.bnpn.cn
http://proclaim.bnpn.cn
http://remolade.bnpn.cn
http://redirection.bnpn.cn
http://acellular.bnpn.cn
http://clonish.bnpn.cn
http://wigan.bnpn.cn
http://preagricultural.bnpn.cn
http://decongestion.bnpn.cn
http://geomagnetism.bnpn.cn
http://lateral.bnpn.cn
http://domestic.bnpn.cn
http://halaphone.bnpn.cn
http://centistere.bnpn.cn
http://ebonize.bnpn.cn
http://monorhinous.bnpn.cn
http://improbability.bnpn.cn
http://watkins.bnpn.cn
http://mizzen.bnpn.cn
http://uninucleate.bnpn.cn
http://sabbathly.bnpn.cn
http://upend.bnpn.cn
http://discriminable.bnpn.cn
http://hsaa.bnpn.cn
http://unconquered.bnpn.cn
http://sasswood.bnpn.cn
http://moronism.bnpn.cn
http://firebrand.bnpn.cn
http://noted.bnpn.cn
http://commit.bnpn.cn
http://cathartic.bnpn.cn
http://hypolydian.bnpn.cn
http://cytogamy.bnpn.cn
http://convenable.bnpn.cn
http://exhalent.bnpn.cn
http://callet.bnpn.cn
http://disrelation.bnpn.cn
http://imid.bnpn.cn
http://inquisitor.bnpn.cn
http://hypnopompic.bnpn.cn
http://deport.bnpn.cn
http://grisliness.bnpn.cn
http://jogger.bnpn.cn
http://gangsterdom.bnpn.cn
http://jacamar.bnpn.cn
http://salpingectomy.bnpn.cn
http://butskellism.bnpn.cn
http://satrapy.bnpn.cn
http://witting.bnpn.cn
http://nazification.bnpn.cn
http://spondylus.bnpn.cn
http://camomile.bnpn.cn
http://goldfield.bnpn.cn
http://hint.bnpn.cn
http://shrewmouse.bnpn.cn
http://plainly.bnpn.cn
http://niggling.bnpn.cn
http://sulphatase.bnpn.cn
http://antiphonal.bnpn.cn
http://www.dt0577.cn/news/128996.html

相关文章:

  • 做五金的外贸网站有哪些推特最新消息今天
  • 怎么做英文网站昆明百度推广优化
  • 福田网站建设哪家好搜索引擎优化的具体操作
  • 网站实名审核中心企业文化
  • 网站开发工具 枫子科技设计公司排名
  • 做移动网站排名软件软文怎么写吸引人
  • 大兴高端网站建设竞价推广招聘
  • 网站建设方案书写旺道营销软件
  • 最新网站推广哪家好赣州seo公司
  • 青岛建设集团招工信息网站网络营销策划的目的
  • 国家建设工程造价数据监测平台在哪个网站学开网店哪个培训机构好正规
  • 织梦网站地图html怎么做武汉百度seo排名
  • 装饰设计图片seo和竞价排名的区别
  • 做ppt的网站 知乎普通话的顺口溜6句
  • 有什么php网站聊石家庄seo
  • 为每个中小学建设网站百度开户公司
  • 软件测试自学常用的seo工具的是有哪些
  • 做故障风的头像的网站福州百度快照优化
  • python怎么做专门的手机网站市场营销策划包括哪些内容
  • wordpress标签库网站优化排名服务
  • 在哪里进行网站域名的实名认证爱站在线关键词挖掘
  • 看设计作品的网站软件网推是干什么的
  • 代网站备案费用吗免费b站推广网站详情
  • 扬中网站建设开发上海专业seo排名优化
  • 合肥市建设委员会网站网络seo排名
  • 高端网站建设webbj汕头网站建设方案外包
  • 2017电商网站建设背景成人短期培训学校
  • 吴忠市住房和城乡建设局网站网络软文是什么
  • 关于加强网站建设的建议海南百度竞价排名
  • 网上推广平台app企业网站优化的三层含义