时间:2021-05-19
JWT(JSON WEB TOKEN)是基于RFC 7519标准定义的一种可以安全传输的小巧和自包含的JSON对象。由于数据是使用数字签名的,所以是可信任的和安全的。JWT可以使用HMAC算法对secret进行加密或者使用RSA的公钥私钥对来进行签名。
JWT通常由头部(Header),负载(Payload),签名(Signature)三个部分组成,中间以.号分隔,其格式为Header.Payload.Signature
Header:声明令牌的类型和使用的算法
Payload:也称为JWT Claims,包含用户的一些信息
系统保留的声明(Reserved claims):
公共的声明(public):见 http://ponent public class JWTAuthFilter implements GlobalFilter, Ordered{ @Override public int getOrder() { return -100; } @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { String url = exchange.getRequest().getURI().getPath(); //忽略以下url请求 if(url.indexOf("/auth-service/") >= 0){ return chain.filter(exchange); } //从请求头中取得token String token = exchange.getRequest().getHeaders().getFirst("Authorization"); if(StringUtil.isEmpty(token)){ ServerHttpResponse response = exchange.getResponse(); response.setStatusCode(HttpStatus.OK); response.getHeaders().add("Content-Type", "application/json;charset=UTF-8"); Response res = new Response(401, "401 unauthorized"); byte[] responseByte = JSONObject.fromObject(res).toString().getBytes(StandardCharsets.UTF_8); DataBuffer buffer = response.bufferFactory().wrap(responseByte); return response.writeWith(Flux.just(buffer)); } //请求中的token是否在redis中存在 boolean verifyResult = JWTUtil.verify(token); if(!verifyResult){ ServerHttpResponse response = exchange.getResponse(); response.setStatusCode(HttpStatus.OK); response.getHeaders().add("Content-Type", "application/json;charset=UTF-8"); Response res = new Response(1004, "invalid token"); byte[] responseByte = JSONObject.fromObject(res).toString().getBytes(StandardCharsets.UTF_8); DataBuffer buffer = response.bufferFactory().wrap(responseByte); return response.writeWith(Flux.just(buffer)); } return chain.filter(exchange); } }
3、关键的application配置信息
spring: application: name: service-gateway cloud: gateway: discovery: locator: enabled: true lowerCaseServiceId: true routes: #认证服务路由 - id: auth-service predicates: - Path=/auth-service/** uri: lb://auth-service filters: - StripPrefix=1以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文介绍了springBoot实战之Filter实现使用JWT进行接口认证,分享给大家jwt(jsonwebtoken)用户发送按照约定,向服务端发送Heade
在SpringBoot中集成Shiro,并使用JWT进行接口认证。为了统一对Token进行过滤,所以自定义了一个JwtTokenFilter过滤器。期间遇到了以
1简介在之前的文章《Springboot集成SpringSecurity实现JWT认证》讲解了如何在传统的Web项目中整合SpringSecurity和JWT,
demo地址:https://github.com/william0705/JWTS名词解析认证:识别用户是否合法授权:赋予用户权限(能访问哪些资源)鉴权:鉴定
最近在重构公司以前产品的前端代码,摈弃了以前的session-cookie鉴权方式,采用token鉴权,忙里偷闲觉得有必要对几种常见的鉴权方式整理一下。目前我们