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

网站设计的技能wordpress评论分页

网站设计的技能,wordpress评论分页,个人网站免费空间,网页设计心得体会200文章目录 什么是JWT?为什么需要令牌?如何实现?添加依赖#xff1a;JwtUtils.java#xff08;生成、解析Token的工具类#xff09;jwt配置#xff1a;登录业务逻辑#xff1a;其他关联代码#xff1a;测试#xff1a; 什么是JWT? JWT#xff08;Json Web TokenJwtUtils.java生成、解析Token的工具类jwt配置登录业务逻辑其他关联代码测试 什么是JWT? JWTJson Web Token简单来说就是web领域中基于json格式的令牌。是最常用的令牌规范。 第一部分Header头指定了令牌的签名算法、令牌类型。第二部分Payload有效载荷使用Base64来编码的不是加密算法能够解码。因此该部分不适合存放用户的私密信息如密码。第三部分Signature签名将第一部分和第二部分通过密钥加密得到。 解析Token可以根据第三部分解密得到前两部分的信息再比对前端传来的用户信息完成校验。 Token验证失败的情况 token过期密钥不正确篡改了头部、载荷等 为什么需要令牌? 承载了一定的数据信息减少数据库访问次数具有一定的防伪功能 如何实现? 该部分代码不需要硬记理解后直接使用即可。 添加依赖 dependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactIdversion0.9.1/version /dependencyJwtUtils.java生成、解析Token的工具类 public class JwtUtil {/*** 生成Token* param secretKey* param ttlMillis* param claims* return*/public static String createToken(String secretKey, long ttlMillis, MapString, Object claims) {// 指定签名的时候使用的签名算法也就是header那部分SignatureAlgorithm signatureAlgorithm SignatureAlgorithm.HS256;// 生成token的过期时间long expMillis System.currentTimeMillis() ttlMillis;Date exp new Date(expMillis);// 设置jwt的bodyJwtBuilder builder Jwts.builder()// 如果有私有声明一定要先设置这个自己创建的私有的声明这个是给builder的claim赋值一旦写在标准的声明赋值之后就是覆盖了那些标准的声明的.setClaims(claims)// 设置签名使用的签名算法和签名使用的秘钥.signWith(signatureAlgorithm, secretKey.getBytes(StandardCharsets.UTF_8))// 设置过期时间.setExpiration(exp);return builder.compact();}/*** 解析token* param secretKey* param token* return*/public static Claims parseToken(String secretKey, String token) {// 得到DefaultJwtParserClaims claims Jwts.parser()// 设置签名的秘钥.setSigningKey(secretKey.getBytes(StandardCharsets.UTF_8))// 设置需要解析的jwt.parseClaimsJws(token).getBody();return claims;}}jwt配置 application.yaml user:jwt:# 设置jwt签名加密时使用的秘钥user-secret-key: xxx# 设置jwt过期时间user-ttl: 7200000# 设置前端传递过来的令牌名称user-token-name: tokenJwtProperties Component ConfigurationProperties(prefix user.jwt) Data public class JwtProperties {private String userSecretKey;private long userTtl;private String userTokenName; }JwtClaimsConstant管理常量 public class JwtClaimsConstant {public static final String USER_ID userId; }jwt拦截器 Component Slf4j public class JwtInterceptor implements HandlerInterceptor {Resourceprivate JwtProperties jwtProperties;Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//1. 获取用户信息String token request.getHeader(jwtProperties.getUserTokenName());//2. 判断用户信息是否有效存入ThreadLocaltry {Claims claims JwtUtil.parseToken(jwtProperties.getUserSecretKey(), token);String userInfo claims.get(JwtClaimsConstant.USER_ID).toString();if (StrUtil.isNotBlank(userInfo)){UserContext.setUser(Long.valueOf(userInfo));}//3. 放行return true;}catch (Exception e){//4. 不通过response.setStatus(401);return false;}}Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {//清除用户信息UserContext.removeUser();} } WebMvc配置添加jwt拦截器 Configuration public class WebConfig implements WebMvcConfigurer {Resourceprivate JwtInterceptor jwtInterceptor;Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(jwtInterceptor).addPathPatterns(/user/**).excludePathPatterns(/user/user/login);} }UserContext存储用户登录信息方便其他业务需求获取 public class UserContext {private static final ThreadLocalLong threadLocal new ThreadLocal();/*** 获取用户信息* return*/public static Long getUser() {return threadLocal.get();}/*** 设置用户信息* param userId*/public static void setUser(Long userId){threadLocal.set(userId);}/*** 移除用户信息*/public static void removeUser(){threadLocal.remove();} }登录业务逻辑 controller层 RestController RequestMapping(/user/user) Slf4j public class UserController {Resourceprivate UserService userService;PostMapping(/login)public UserLoginVO login(RequestBody UserLoginDTO userLoginDTO){log.info(用户登录{},userLoginDTO);return userService.login(userLoginDTO);} } service层 public interface UserService {UserLoginVO login(UserLoginDTO userLoginDTO); }Service Slf4j public class UserServiceImpl implements UserService {Resourceprivate UserMapper userMapper;Resourceprivate JwtProperties jwtProperties;Overridepublic UserLoginVO login(UserLoginDTO userLoginDTO) {String username userLoginDTO.getUsername();String password userLoginDTO.getPassword();//1. 校验用户名和密码UserLogin userLogin userMapper.getUserByName(username);if (userLogin null){throw new BaseException(用户名或密码错误);}password DigestUtils.md5DigestAsHex(password.getBytes());if (!password.equals(userLogin.getPassword())){throw new BaseException(用户名或密码错误);}//2. 生成tokenHashMapString, Object claims new HashMap();claims.put(JwtClaimsConstant.USER_ID, userLogin.getId());String token JwtUtil.createToken(jwtProperties.getUserSecretKey(),jwtProperties.getUserTtl(),claims);//3. 封装voUserLoginVO loginVO UserLoginVO.builder().token(token).userId(userLogin.getId()).username(userLogin.getUsername()).build();return loginVO;} }mapper层 Mapper public interface UserMapper {UserLogin getUserByName(String username); }?xml version1.0 encodingUTF-8 ? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.sky.user.mapper.UserMapperselect idgetUserByName resultTypecom.sky.user.pojo.entity.UserLoginselect *from user_login where username #{username} and is_delete 0;/select /mapper其他关联代码 Data AllArgsConstructor NoArgsConstructor public class UserLoginDTO {/*** 用户名*/private String username;/*** 密码*/private String password;}Data Builder NoArgsConstructor AllArgsConstructor public class UserLoginVO {private String token;private Long userId;private String username; }测试 登录接口 其他接口 以上为个人学习分享如有问题欢迎指出
http://www.hkea.cn/news/14587268/

相关文章:

  • 成都做公司网站电脑购物网站模板
  • 推荐微商城网站建设展示型企业网站营销目标主要有
  • 太原网站优化哪家专业做外贸纱线用什么网站
  • 徐州市工程造价信息网网站的链接优化
  • 微网站 举例营销方案范文100例
  • 无锡网站设计哪家公司好长春九台建设局网站
  • 大连建设网水电泉州seo建站
  • 烟台建设用地规划查询网站用wordpress如何添加关键字
  • html5 手机网站开发叫才51模板ppt
  • html静态网站开发实验flash中文网站模板
  • 货运代理网站模板做网站小语种翻译多少钱
  • 亚马逊网站开发使用的什么方式室内设计软件下载网站大全
  • 苏州工业园区两学一做教育网站旅游网站怎么用dw做
  • 为进一步加强网站建设wordpress 课程主题
  • 建站平台控制山东省菏泽市城乡建设局网站
  • 视频弹幕网站怎么做的大连网络公司哪家好
  • 网站支付页面源代码软件开发包含哪些内容
  • iis配置静态网站河北邢台市的快递能收吗
  • 湖南建设监理官方网站重庆建设工业集团官网
  • 深圳市工商注册信息查询网站asp网站架设教程
  • 吉林市网站建设公司wordpress 首页折叠
  • 网站如何进行品牌建设要多少钱
  • 北京做网站维护吴忠网页设计
  • 一个网站余姚什么网站开发费属于研发支出吗
  • 郑州专业网站建设公司首选服务定制网站
  • 网站建设如何提高转化率一个app能卖多少钱
  • 烟台H5高端网站建设如何设计网站的链接
  • 网站排名方法安徽省水利建设厅官方网站
  • 西宁做网站君博领先广东短视频seo搜索哪家好
  • 青岛网站制作方案提升学历的重要性与意义