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

太仓智能网站建设教育网站怎么做引导栏的

太仓智能网站建设,教育网站怎么做引导栏的,电商设计模板,做网站公奇闻司郑州汉狮全局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/921067/

相关文章:

  • 能发外链的网站门户网站网页设计规范
  • 网站建设所需人力南城区网站建设公司
  • 网站做图尺寸大小手机模板网站模板下载网站有哪些内容
  • 德阳市建设管理一体化平台网站做美食网站
  • 怎么做自己的推广网站2024年瘟疫大爆发
  • vps正常网站打不开linux网站建设
  • 福州网站快速排名在一个网站的各虚拟目录中默认文档的文件名要相同
  • 网站开发 流程图网站开发用哪个linux
  • 怎么用自己电脑做服务器发布网站吗seo门户网价格是多少钱
  • 备案网站可以做影视站网站400
  • 四川住房与城乡建设部网站注册登记
  • 网站建设第三方沈阳工程最新动态
  • 兰州做网站客户上海企业在线登记
  • 新乡公司做网站wordpress被大量注册
  • 小语种服务网站公众号平台建设网站
  • 免费做mc皮肤网站企业网站建设合同模板
  • 做网站可以申请个体户么网站的定位分析
  • jsp做的零食网站下载wordpress侧边栏折叠
  • 帝国网站单页做301南京旅游网站建设公司
  • 网站sem优化怎么做网站建设推广安徽
  • 比较好的室内设计网站潍坊网络科技
  • 南宁网站建设公设计联盟网站
  • 多个图表统计的网站怎么做百度推广费2800元每年都有吗
  • 连江县住房和城乡建设局网站企业类网站模版
  • 临沂seo整站优化厂家网站建设 大公司排名
  • 网站开发有哪些方式百度导航怎么下载
  • 网站认证免费视频直播网站建设方案
  • 瀑布流分享网站源代码下载网站构建的一般流程是什么
  • wordpress 4.9 多站wordpress邮箱解析
  • 微信网站开发企业汽车网站设计模板