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

上海网站建设 觉策动力wordpress接口开发

上海网站建设 觉策动力,wordpress接口开发,用手机制作ppt用什么软件,外贸最热门的十大产品全局token验证 简介 ​通俗地说#xff0c;JWT的本质就是一个字符串#xff0c;它是将用户信息保存到一个Json字符串中#xff0c;然后进行编码后得到一个JWT token#xff0c;并且这个JWT token带有签名信息#xff0c;接收后可以校验是否被篡改#xff0c;所以可以用…全局token验证 简介 ​通俗地说JWT的本质就是一个字符串它是将用户信息保存到一个Json字符串中然后进行编码后得到一个JWT token并且这个JWT token带有签名信息接收后可以校验是否被篡改所以可以用于在各方之间安全地将信息作为Json对象传输。JWT的认证流程如下 前端通过Web表单将自己的用户名和密码发送到后端的接口这个过程一般是一个POST请求。建议的方式是通过SSL加密的传输(HTTPS)从而避免敏感信息被嗅探 后端核对用户名和密码成功后将包含用户信息的数据作为JWT的Payload将其与JWT Header分别进行Base64编码拼接后签名形成一个JWT Token形成的JWT Token就是一个如同lll.zzz.xxx的字符串 由一下可以实现全局的token验证无需再其余地方进行验证token。 jwt实现 public class AppJwtUtil {// TOKEN的有效期一天Sprivate static final int TOKEN_TIME_OUT 3_600;// 加密KEYprivate static final String TOKEN_ENCRY_KEY MDk4ZjZiY2Q0NjIxZDM3M2NhZGU0ZTgzMjYyN2I0ZjY;// 最小刷新间隔(S)private static final int REFRESH_TIME 300;// 生产IDpublic static String getToken(Long id){MapString, Object claimMaps new HashMap();claimMaps.put(id,id);long currentTime System.currentTimeMillis();return Jwts.builder().setId(UUID.randomUUID().toString()).setIssuedAt(new Date(currentTime)) //签发时间.setSubject(short-chain) //说明.setIssuer(zh) //签发者信息.setAudience(app) //接收用户.compressWith(CompressionCodecs.GZIP) //数据压缩方式.signWith(SignatureAlgorithm.HS512, generalKey()) //加密方式.setExpiration(new Date(currentTime TOKEN_TIME_OUT * 1000)) //过期时间戳.addClaims(claimMaps) //cla信息.compact();}//临时tokenpublic static String getToken( ){MapString, Object claimMaps new HashMap();long currentTime System.currentTimeMillis();return Jwts.builder().setId(UUID.randomUUID().toString()).setIssuedAt(new Date(currentTime)) //签发时间.setSubject(short-chain) //说明.setIssuer(zh) //签发者信息.setAudience(app) //接收用户.compressWith(CompressionCodecs.GZIP) //数据压缩方式.signWith(SignatureAlgorithm.HS512, generalKey()) //加密方式.setExpiration(new Date(currentTime TOKEN_TIME_OUT/60 )) //过期时间戳.addClaims(claimMaps) //cla信息.compact();}public static String getAppkey( ){MapString, Object claimMaps new HashMap();long currentTime System.currentTimeMillis();return Jwts.builder().setId(UUID.randomUUID().toString()).setIssuedAt(new Date(currentTime)) //签发时间.setSubject(short-chain) //说明.setIssuer(zh) //签发者信息.setAudience(app) //接收用户.compressWith(CompressionCodecs.GZIP) //数据压缩方式.signWith(SignatureAlgorithm.HS512, generalKey()) //加密方式.setExpiration(new Date(currentTime TOKEN_TIME_OUT*60000000000L )) //过期时间戳.addClaims(claimMaps) //cla信息.compact();}/*** 获取token中的claims信息** param token* return*/private static JwsClaims getJws(String token) {return Jwts.parser().setSigningKey(generalKey()).parseClaimsJws(token);}/*** 获取payload body信息** param token* return*/public static Claims getClaimsBody(String token) {try {return getJws(token).getBody();}catch (ExpiredJwtException e){return null;}}/*** 获取hearder body信息** param token* return*/public static JwsHeader getHeaderBody(String token) {return getJws(token).getHeader();}/*** 是否过期** param claims* return -1有效0有效1过期2过期*/public static int verifyToken(Claims claims) {if(claimsnull){return 1;}try {claims.getExpiration().before(new Date());// 需要自动刷新TOKENif((claims.getExpiration().getTime()-System.currentTimeMillis())REFRESH_TIME*1000){return -1;}else {return 0;}} catch (ExpiredJwtException ex) {return 1;}catch (Exception e){return 2;}}/*** 由字符串生成加密key** return*/public static SecretKey generalKey() {byte[] encodedKey Base64.getEncoder().encode(TOKEN_ENCRY_KEY.getBytes());SecretKey key new SecretKeySpec(encodedKey, 0, encodedKey.length, AES);return key;}public static void main(String[] args) {/* Map map new HashMap();map.put(id,11);*/System.out.println(AppJwtUtil.getToken(1102L));JwsClaims jws AppJwtUtil.getJws(eyJhbGciOiJIUzUxMiIsInppcCI6IkdaSVAifQ.H4sIAAAAAAAAADWLQQqEMAwA_5KzhURNt_qb1KZYQSi0wi6Lf9942NsMw3zh6AVW2DYmDGl2WabkZgreCaM6VXzhFBfJMcMARTqsxIG9Z888QLui3e3Tup5Pb81013KKmVzJTGo11nf9n8v4nMUaEY73DzTabjmDAAAA.4SuqQ42IGqCgBai6qd4RaVpVxTlZIWC826QA9kLvt9d-yVUw82gU47HDaSfOzgAcloZedYNNpUcd18Ne8vvjQA);Claims claims jws.getBody();System.out.println(claims.get(id));}}拦截器 /*** Description:* author: zh* Create : 2024/11/26* Project_name : short-chain* Version :**/ Component Slf4j public class TokenValidationInterceptor implements HandlerInterceptor {private static final String[] filters {Login,swagger,swagger-ui,webjars,api-docs,doc.html,getToken};/*** 验证token是否有效* param request* param response* param handler* return* throws Exception*/Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String servletPath request.getServletPath();for(String filter:filters){if(servletPath.contains(filter)){return true;}}// 获取请求头中的TokenString token request.getHeader(Authorization);if (token null || !isValidToken(token)) {// 如果Token无效返回401未授权状态码response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); // response.getWriter().write(Invalid or missing token);return false; // 阻止请求继续处理}return true;}private boolean isValidToken(String token) {int i AppJwtUtil.verifyToken(AppJwtUtil.getClaimsBody(token));return i2?false:true;} }配置拦截 Configuration public class WebMvcConfig implements WebMvcConfigurer {Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new TokenValidationInterceptor())// 拦截的路径.addPathPatterns(/**)// 开放的路径.excludePathPatterns(/login, /getToken);} }
http://www.w-s-a.com/news/22561/

相关文章:

  • 网站建设服务器的选择方案小型视频网站建设
  • 江宁做网站价格扬州立扬计算机培训网站建设怎么样
  • 手表网站背景开发新客户的十大渠道
  • 定制网站设计wordpress写的网站
  • p2p网站建设公司排名成都装饰公司
  • 网站被k怎么恢复wordpress缓存类
  • 做外贸有哪些网站平台最近文章 wordpress
  • joomla网站模板一个人做网站的swot
  • 南京建设网站需要多少钱深圳专业网站建设制作价格
  • 天河建网站装修公司线上推广方式
  • 超市网站怎么做的目前最流行的拓客方法
  • 做文字logo的网站贵阳商城网站开发
  • 沧州有没有做网站的中国建筑设计
  • 建设网站 系统占用空间在线代理浏览网站
  • 做海报有什么参考的网站网站建设验收合同
  • 酒店网站制作wordpress文章评论设置
  • 造一个官方网站wordpress mysql类
  • 怎么做卡商网站河南做网站找谁
  • 网站建设招标方案模板上线啦 图谱智能网站
  • 龙口网站建设公司哪家好wordpress 上传类型
  • 做外贸主要看什么网站服务平台的宗旨
  • 宜昌营销型网站购买网站
  • 如何查询网站建设时间wordpress 框架解析
  • 网站建设年终总结网站建设公司顺义
  • 网页给别人做的 网站后续收费吗获取更多付费流量
  • 金融交易网站建设金融 网站建设
  • 长沙网站建设联系电话怎么做表格
  • 网站怎么做域名实名认证龙华网站 建设信科网络
  • 企业网站规划方案网站是做排行榜
  • 万维网网站个人申请网站