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

网站开发外包项目网站网站建设交易平台

网站开发外包项目网站,网站建设交易平台,未明潮网站建设保密协议,安徽网站建设论坛整合JWT 令牌组成 1.标头(Header)2.有效载荷(Payload)3.签名(Signature) 因此#xff0c;JWT通常如下所示:xxxxx.yyyyy.zzzzz Header.Payload.Signature jwt组成 Header 标头通常由两部分组成#xff1a;令牌的类型#xff08;即JWT#xff09;和所使用的签名算法JWT通常如下所示:xxxxx.yyyyy.zzzzz Header.Payload.Signature jwt组成 Header 标头通常由两部分组成令牌的类型即JWT和所使用的签名算法例如HMAC SHA256或RSA。它会使用 Base64 编码组成 JWT 结构的第一部分。 注意:Base64是一种编码也就是说它是可以被翻译回原来的样子来的。它并不是一种加密过程。 {alg: HS256,typ: JWT }Payload 不要在这里放密码反编译Base64即可解码 令牌的第二部分是有效负载其中包含声明。声明是有关实体通常是用户和其他数据的声明。同样的它会使用 Base64 编码组成 JWT 结构的第二部分 {username: xzxadmin,datetime: 2023-05-01 11:11:11,role: admin }Signature 前面两部分都是使用 Base64 进行编码的即前端可以解开知道里面的信息。Signature 需要使用编码后的 header 和 payload以及我们提供的一个密钥然后使用 header 中指定的签名算法HS256进行签名。签名的作用是保证 JWT 没有被篡改过如: HMACSHA256(base64UrlEncode(header) “.” base64UrlEncode(payload),secret); 整合JWT !--引入jwt-- dependencygroupIdcom.auth0/groupIdartifactIdjava-jwt/artifactIdversion3.4.0/version /dependencyJWT帮助类 public class JwtUtils {//常量public static final long time 1000 * 60 * 60 * 24;//token过期时间public static final String APP_SECRET ukc8BDbRigUDaY6pZFfWus2jZWLPHO;//秘钥//生成token字符串的方法public static String getJwtToken(String username, String role){String JwtToken Jwts.builder()//头部.setHeaderParam(typ,JWT).setHeaderParam(alg,HS256)//载荷.claim(username,username).claim(role,role).setSubject(jwt-user)//token过期时间1小时.setExpiration(new Date(System.currentTimeMillis()time )).setId(UUID.randomUUID().toString())//id字段//签名.signWith(SignatureAlgorithm.HS256,APP_SECRET)//签名加密算法和//连接字符串(.).compact();return JwtToken;}/*** 判断token是否存在与有效* param jwtToken* return*/public static boolean checkToken(String jwtToken) {if(StringUtils.isEmpty(jwtToken)) return false;try {Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);} catch (Exception e) {e.printStackTrace();return false;}return true;}/*** 判断token是否存在与有效* param request* return*/public static boolean checkToken(HttpServletRequest request) {try {String jwtToken request.getHeader(token);if(StringUtils.isEmpty(jwtToken)) return false;Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);} catch (Exception e) {e.printStackTrace();return false;}return true;}/*** 根据token获取会员id* param request* return*/public static String getMemberIdByJwtToken(HttpServletRequest request) {String jwtToken request.getHeader(token);if(StringUtils.isEmpty(jwtToken)) return ;JwsClaims claimsJws Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);Claims claims claimsJws.getBody();return (String)claims.get(id);} } 整合JWT 导入依赖 !--引入jwt-- dependencygroupIdcom.auth0/groupIdartifactIdjava-jwt/artifactIdversion3.4.0/version /dependency!--引入mybatis-- dependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion2.1.3/version /dependency!--引入lombok-- dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.12/version /dependency!--引入druid-- dependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion1.1.19/version /dependency!--引入mysql-- dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.38/version /dependency配置文件 server.port8989 spring.application.namejwtspring.datasource.typecom.alibaba.druid.pool.DruidDataSource spring.datasource.driver-class-namecom.mysql.jdbc.Driver spring.datasource.urljdbc:mysql://127.0.0.1:3306/jwt?useUnicodetruecharacterEncodingutf8useSSLtrueserverTimezoneUTCuseSSLfalse spring.datasource.usernameroot spring.datasource.password1234mybatis.type-aliases-packagecom.zuhao.springbootjwt.entity mybatis.mapper-locationsclasspath:com/zuhao/springbootjwt/mapper/*.xmllogging.level.com.zuhao.springbootjwt.daodebugJWT拦截器 interceptor包下新建拦截器 Component Slf4j public class LoginCheckInterceptor implements HandlerInterceptor {//目标资源方法执行前执行。 返回true放行 返回false不放行Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//1,先获取请求头String token request.getHeader(Authorization);System.out.println(token:token);response.setContentType(application/json;charset UTF-8);ObjectMapper mapper new ObjectMapper();//2,判断请求头是否存在if (token null || .equals(token)){//请求头不存在或者请求头为空log.info(...token不存在);response.getWriter().write(result:缺少token);return false;}else{try {boolean isJwt JwtUtils.checkToken(token);//解析不出错就是格式有效/*从redis中查询token*///时间有效通过时间无效过期} catch (Exception e) {log.info(请求头不正确!!);response.getWriter().write(result:token错误:);return false;}}return true;}//下面与登录无关,不用写//目标资源方法执行后执行Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println(postHandle ... );}//视图渲染完毕后执行最后执行Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println(afterCompletion .... );} } config包下添加拦截器 Configuration public class WebConfig implements WebMvcConfigurer {Autowiredprivate LoginCheckInterceptor loginCheckInterceptor;Overridepublic void addInterceptors(InterceptorRegistry registry) {//定义拦截对象registry.addInterceptor(loginCheckInterceptor).addPathPatterns(/**).excludePathPatterns(/users/login,/users/login/**,/swagger-ui/,/swagger-ui/**,/swagger-resources,/swagger-resources/**,/v3/**,/users/hello);} }
http://wiki.neutronadmin.com/news/119627/

相关文章:

  • 网站构成微网站建设公司首选公司
  • 怎么自己学做网站手机网页打不开但是有网什么原因
  • 男男互做网站泰国网站的系统建设方式有哪些
  • 易语言怎么做ifa网站填表口碑营销案例分析
  • gps建站步骤视频易读网站建设
  • 汕头站扩建后比哪个站大企业网站备案名称窍门
  • 网站建设腾讯课堂静态网站 服务器
  • 房地产网站解决方案我要自学网官网入口
  • 阿玛尼高仿手表网站建筑网页设计
  • 装修网站vr全景图怎么做网站证书怎么做
  • 成都网站设计培训长春网站优化页面
  • 专门做评测的网站虹口门户网站建设
  • 网站版权模板自己做个网站多少钱
  • 网站不用模板如何更新文章全国防疫大数据平台
  • 同城网站全球云邮登陆网站
  • 服装设计素材网站淘宝 网站建设教程视频教程
  • 郑州网站设计报价表抓好网站建设工作
  • 个人网站做seo线上活动策划方案
  • 电子商务网站开发文档wordpress的分享插件下载地址
  • 网站建设方案书 5个备案没有网站怎么做cpa赚钱
  • 做纸箱在什么网站找客户在线设计自己的签名免费
  • 石家庄网站建设排名北京东站
  • 闸北品牌网站建设四川建设人才网官网登录
  • 网站开发基础教程企业融资规划师证书
  • 网站的建设需要考虑什么html5做网站导航
  • 杭州市网站建设合肥网站营销
  • 坪地网站建设哪家好wordpress评分
  • 聊城网站开发培训微网站 模板
  • 有偷菜餐厅城市建设的网站网站建设服务流程
  • 佛山市建设企业网站服务机构wordpress添加留言