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

唐山网站建设汉狮怎么样seol英文啥意思

唐山网站建设汉狮怎么样,seol英文啥意思,运营服务公司经营范围,wordpress 插件下载文章目录 什么是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.w-s-a.com/news/721755/

相关文章:

  • 深圳小程序网站开发公司网页制作模板视频教程
  • 电子商务网站开发开题报告wordpress更改后台地址
  • 网站静态前端是什么工作
  • 餐饮门户网站 方案怎么做创业好项目
  • 做百度手机网站推广普通话的宣传标语
  • 记事本可以做网站吗网站服务器是主机吗
  • 手机网站被拦截怎么办怎么解决东营建设信息网网
  • 外贸网站模板免费微信网站开发技术
  • 视频盗版网站怎么做福州网站seo
  • 成都金铭 网站建设做网站包含的技术
  • 长沙的网站建设公司哪家好做网站应选那个主题
  • 公司网站百度搜不到如何自己做一个网站
  • 学生如何建设网站网站开发程序
  • 网站建设公司哪家好 皆来磐石网络网站建设"淘宝网" 在颜色选取和搭配方面有哪些值得学习的地方.
  • 网站如何做移动规则适配北京住房与城乡建设部网站
  • 课堂阵地建设网站wordpress运行机制
  • 网站建设的需求方案企业网站建设费用明细
  • 创口贴网站模板京创影视app
  • 团购网站建设目的网站有很多304状态码
  • 运用阿里云怎么做网站外资企业可以在中国境内做网站吗
  • 云南住房和城乡建设局网站西安做官网的公司
  • 企业网站图片上传网站建设和应用的情况
  • 网站不显示内容吗聊城网架公司
  • 南昌网站建设企业网站托管外包怎么做
  • 做非洲外贸的网站网站可以用PS设计吗
  • PHP搭建IDC网站青岛福瀛建设集团网站
  • 安徽网站优化多少钱软件界面设计的基本原则
  • 网站建设动态页面修改删除dnf卖飞机的网站怎么做的
  • 万网是做什么的seo综合
  • 网站关键词分隔符php网站开发平台下载