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

设计师经常上的网站域名 空间 建网站

设计师经常上的网站,域名 空间 建网站,惠州注册公司流程和费用,室内设计联盟官网入口网页#x1f340;#x1f338;明确需求--接口文档--思路分析--开发--测试#x1f338;#x1f340;#x1f495; 1 明确需求 2 接口文档 登录 3 思路分析 UserServic、UserMapper在注册的时候已经实现 现在我们重点看UserController 控制器 4 开发#xff08;实现#xff0… 明确需求--接口文档--思路分析--开发--测试 1 明确需求 2 接口文档 登录 3 思路分析  UserServic、UserMapper在注册的时候已经实现 现在我们重点看UserController 控制器 4 开发实现  4.1 登录认证 JWT token介绍 描述就是在未登录之前访问某些页面内容会被拦截显示未登录请登录等字样 全称JSON Web Token (https://jwt.io/) 简介定义了一种简洁欸的、自包含的格式用于通信对方以json数据格式安全的传输信息 解决使用JWT token令牌 过程用户登录成功后后台生成一个令牌并将令牌响应给浏览器浏览器访问其他页面都必须携带上这个令牌才能访问成功 优点 承载业务数据, 减少后续请求查询数据库的次数防篡改, 保证信息的合法性和有效性 4.2实现 4.2.1编写token测试 导入依赖---在src/test/java... 下编写测试文件 pom.xml !--java-jwt坐标--dependencygroupIdcom.auth0/groupIdartifactIdjava-jwt/artifactIdversion4.4.0/version/dependency!--单元测试的坐标 起步依赖--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactId/dependency 编写测试 测试token的生成以及对token的解析 package com.aaa;import com.auth0.jwt.JWT; import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.interfaces.Claim; import com.auth0.jwt.interfaces.DecodedJWT; import org.junit.jupiter.api.Test;import java.util.Date; import java.util.HashMap; import java.util.Map;public class JwtTest {//Test//生成tokenpublic void testGen() { MapString, Object claims new HashMap();claims.put(id, 1);claims.put(username, 张三);//生成jwt的代码String token JWT.create().withClaim(user, claims)//添加载荷.withExpiresAt(new Date(System.currentTimeMillis() 1000))//添加过期时间.sign(Algorithm.HMAC256(aaa));//指定算法,配置秘钥,随便写System.out.println(token);//打印出token形式}//Test//解析tokenpublic void testParse() {//定义字符串,模拟用户传递过来的tokenString token eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7ImlkIjoxLCJ1c2VybmFtZSI6IuW8oOS4iSJ9LCJleHAiOjE2OTQzMjUzMzB9.dFmeOG04w6EfnCue4CFS-x-XMRv145EfsY8wnchbxL4;//这是上面生成的token内容需正确否则不能解析成功JWTVerifier jwtVerifier JWT.require(Algorithm.HMAC256(aaa)).build(); //密钥与上面需保持一致DecodedJWT decodedJWT jwtVerifier.verify(token);//验证token,生成一个解析后的JWT对象MapString, Claim claims decodedJWT.getClaims();System.out.println(claims.get(user)); //{id:1,username:张三}//如果篡改了头部和载荷部分的数据,那么验证失败//如果秘钥改了,验证失败//token过期} }4.3 登录认证使用token 4.3.1工具类 --JwtUtil.java package com.aaa.utils;import com.auth0.jwt.JWT; import com.auth0.jwt.algorithms.Algorithm;import java.util.Date; import java.util.Map;public class JwtUtil {private static final String KEY aaa; //密钥//接收业务数据,生成token并返回public static String genToken(MapString, Object claims) {return JWT.create().withClaim(claims, claims).withExpiresAt(new Date(System.currentTimeMillis() 1000 * 60 * 60 )).sign(Algorithm.HMAC256(KEY));}//接收token,验证token,并返回业务数据public static MapString, Object parseToken(String token) {return JWT.require(Algorithm.HMAC256(KEY)).build().verify(token).getClaim(claims).asMap();}}4.3.2登录控制器 对用户名、密码进行判断用户名、密码无误后生成令牌 PostMapping(/login)public ResultString login(Pattern(regexp ^\\S{5,16}$) String username, Pattern(regexp ^\\S{5,16}$) String password) {//根据用户名查询用户User loginUser userService.findByUserName(username);//判断该用户是否存在if (loginUser null) {return Result.error(用户名错误);}//判断密码是否正确 loginUser对象中的password是密文if (Md5Util.getMD5String(password).equals(loginUser.getPassword())) {//登录成功生成令牌MapString, Object claims new HashMap();claims.put(id, loginUser.getId()); //放入注册用户的idclaims.put(username, loginUser.getUsername());//放入注册用户的usernameString token JwtUtil.genToken(claims); //生成tokenreturn Result.success(token); //响应JWT token令牌字符串}return Result.error(密码错误);}4.4 设置拦截器因为拦截的页面可能不止一个 拦截将对未登录的用户其操作的访问某些页面进行拦截不允许未登录用户访问 拦截器 获取浏览器请求头中的tokenAuthorization里的内容 查看存储的token是否存在或者失效 解析token 放行返回true 否则不放行放回false package com.aaa.interceptors;import com.aaa.pojo.Result; import com.aaa.utils.JwtUtil; import com.aaa.utils.ThreadLocalUtil; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor;import java.util.Map;Component public class LoginInterceptor implements HandlerInterceptor {Autowiredprivate StringRedisTemplate stringRedisTemplate;Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//令牌验证String token request.getHeader(Authorization);//验证tokentry {//从redis中获取相同的tokenValueOperationsString, String operations stringRedisTemplate.opsForValue();String redisToken operations.get(token);if (redisTokennull){//token已经失效了throw new RuntimeException();}MapString, Object claims JwtUtil.parseToken(token);//把业务数据存储到ThreadLocal中ThreadLocalUtil.set(claims);//放行return true;} catch (Exception e) {//http响应状态码为401response.setStatus(401);//不放行return false;}} 配置类 public void addInterceptors(InterceptorRegistry registry) {: 这是一个公共方法名为addInterceptors它接受一个InterceptorRegistry类型的参数registry。InterceptorRegistry是Spring MVC提供的一个用于注册拦截器的类 package com.aaa.config;import com.itheima.interceptors.LoginInterceptor; import org.springframework.beans.factory.annotation.Autowired; 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 WebConfig implements WebMvcConfigurer {Autowiredprivate LoginInterceptor loginInterceptor;Overridepublic void addInterceptors(InterceptorRegistry registry) {//登录接口和注册接口不拦截registry.addInterceptor(loginInterceptor).excludePathPatterns(/user/login,/user/register);} }
http://www.pierceye.com/news/388103/

相关文章:

  • 班级网站怎么做网页制作临沂网站制作方案
  • 泰州网站建设服务好wordpress调用分类名
  • 中英切换的网站咋做怎样在网站做推广
  • 初学网站开发书籍如何提升网站打开速度
  • 深圳微信网站建设公司哪家好网站 维护 页面
  • 做个企业网站需要多少钱北京西站到大兴机场
  • 数字博物馆网站建设动态设计是什么意思
  • 沧州市做网站价格wordpress构建自己的网站
  • seo外链网站源码新公司注册核名
  • 游戏网站建设的策划方案python做电子商务网站
  • pxhere素材网站网上搞钱的野路子
  • 有没有帮人做数学题的网站9377游戏盒子
  • 微信网站建设报价网站优化提升排名
  • wap网站分享代码自定义网站建设
  • 网站换域名了怎么办seo百度帐号注册
  • 淄博网站建设公司羊肉片机网站模板制作
  • 邯郸网站设计价位南京h5 网站建设
  • wordpress主要函数seo是哪个英文的缩写
  • 自助建站网站seo公司静态网站作品
  • 内部网站建设、北京的网页建设公司
  • 网站建设的后台登录oa信息管理系统
  • 镇江企业网站建设公司wordpress模板如何修改
  • 汕头中文建站模板建设全网营销型网站
  • 外贸网站建设盲区雄安移动网络电视
  • 建站方法友情链接发布平台
  • 做美剧盗版网站国内购物网站案例分析
  • 淄博网站制作哪家公司好东莞网站设计公司哪家好
  • 用dreammwea怎么做视频网站域名注册网站建设
  • 网站关键词用热门的还是冷门注销网站备案时间
  • 苏晋建设集团网站书店网站建设目标调研的方案