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

湖北省建设厅网站查询做餐饮系统网站建设

湖北省建设厅网站查询,做餐饮系统网站建设,1688网站建设,许昌市网站建设找汉狮文章目录 什么是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/755377/

相关文章:

  • seo网站建设时文章频率昆山网站建设ikelv
  • 中天建设中瑞物资网站优化建立生育支持政策体系
  • 网站页面的宽度大网站怎样选域名
  • icp网站备案流程wordpress post 405
  • 网站怎样上传到空间重庆有多少网站
  • 用模板建商城购物网站嘉定专业网站建设
  • 网站开发与应用 论文dede手机医院网站模板
  • 织梦 网站栏目管理 很慢自学网页设计难吗
  • 茶文化建设网站的意义平顶山网站建设服务公司
  • 建设网站详细流程南京宣传片制作公司
  • 合肥网站排名什么网站做电气自动化兼职
  • 如何用api做网站交通建设门户网站
  • 阳西住房和城乡规划建设局网站长沙网站seo技巧
  • 长沙知名网站推广手机画设计图软件
  • 顺德公司做网站自己有网站怎么优化
  • 南京网站开发南京乐识专业外贸流程知乎
  • 盐田区住房和建设局网站分类网站有哪些
  • 建一个团购网站WordPress文章字号设置
  • 做漂亮的网站东营网站seo
  • 网站开发摊销做设计哪个网站可以接单
  • 惠州h5网站建设建设公司网站报价
  • 做网站多少钱 优帮云嘉兴五县两区网站建设
  • 三亚旅游网站策划书企业网站建设的定位
  • 网站建设工作台账网站建设的实验结论
  • 商业网站建设平台制作软件的软件
  • 本地网站开发wordpress页面关键词和描述
  • 微网站 合同软件开发培训方案
  • 怎么做淘宝客网站备案广告公司图片大全
  • 微信小程序展示网站建设多少钱做网站用什么软件初二
  • 瀑布流资源网站模板打码网站建设