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

浙江专业做网站/什么是电商

浙江专业做网站,什么是电商,微信个人公众号怎么创建,江苏常州最新疫情1、思路分析 1. 用户进入网关开始登陆,网关过滤器进行判断,如果是登录,则路由到后台管理微服务进行登录 2. 用户登录成功,后台管理微服务签发JWT TOKEN信息返回给用户 3. 用户再次进入网关开始访问,网关过滤器接收用…

1、思路分析

1. 用户进入网关开始登陆,网关过滤器进行判断,如果是登录,则路由到后台管理微服务进行登录

2. 用户登录成功,后台管理微服务签发JWT TOKEN信息返回给用户

3. 用户再次进入网关开始访问,网关过滤器接收用户携带的TOKEN

4. 网关过滤器解析TOKEN ,判断是否有权限,如果有,则放行,如果没有则返回未认证错误

2、系统微服务签发token

(1)在changgou_service_system添加依赖

<dependency>

  <groupId>io.jsonwebtoken</groupId>

  <artifactId>jjwt</artifactId>

  <version>0.9.0</version>

</dependency>

(2)在changgou_service_system中创建类: JwtUtil

package com.changgou.system.util;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
import java.util.Date;
/*** JWT工具类*/
public class JwtUtil {
​//有效期为public static final Long JWT_TTL = 3600000L;// 60 * 60 *1000  一个小时//设置秘钥明文public static final String JWT_KEY = "itcast";
​/*** 创建token* @param id* @param subject* @param ttlMillis* @return*/public static String createJWT(String id, String subject, Long ttlMillis) {
​SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;long nowMillis = System.currentTimeMillis();Date now = new Date(nowMillis);if(ttlMillis==null){ttlMillis=JwtUtil.JWT_TTL;}long expMillis = nowMillis + ttlMillis;Date expDate = new Date(expMillis);SecretKey secretKey = generalKey();
​JwtBuilder builder = Jwts.builder().setId(id)              //唯一的ID.setSubject(subject)   // 主题  可以是JSON数据.setIssuer("admin")     // 签发者.setIssuedAt(now)      // 签发时间.signWith(signatureAlgorithm, secretKey) //使用HS256对称加密算法签名, 第二个参数为秘钥.setExpiration(expDate);// 设置过期时间return builder.compact();}
​/*** 生成加密后的秘钥 secretKey* @return*/public static SecretKey generalKey() {byte[] encodedKey = Base64.getDecoder().decode(JwtUtil.JWT_KEY);SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");return key;}
}

 (3)修改AdminController的login方法, 用户登录成功 则 签发TOKEN

  /*** 登录* @param admin* @return*/@PostMapping("/login")public Result login(@RequestBody Admin admin){boolean login = adminService.login(admin);if(login){  //如果验证成功Map<String,String> info = new HashMap<>();info.put("username",admin.getLoginName());String token = JwtUtil.createJWT(UUID.randomUUID().toString(), admin.getLoginName(), null);info.put("token",token);return new Result(true, StatusCode.OK,"登录成功",info);}else{return new Result(false,StatusCode.LOGINERROR,"用户名或密码错误");}}

使用postman 测试

 

3、网关过滤器验证token 

(1)在changgou_gateway_system网关系统添加依赖 

<!--鉴权-->

<dependency>

    <groupId>io.jsonwebtoken</groupId>

    <artifactId>jjwt</artifactId>

    <version>0.9.0</version>

</dependency>

(2)创建JWTUtil类

package com.changgou.gateway.util;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
​
/*** jwt校验工具类*/
public class JwtUtil {
​//有效期为public static final Long JWT_TTL = 3600000L;// 60 * 60 *1000  一个小时//设置秘钥明文public static final String JWT_KEY = "itcast";
​/*** 生成加密后的秘钥 secretKey** @return*/public static SecretKey generalKey() {byte[] encodedKey = Base64.getDecoder().decode(JwtUtil.JWT_KEY);SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");return key;}
​/*** 解析** @param jwt* @return* @throws Exception*/public static Claims parseJWT(String jwt) throws Exception {SecretKey secretKey = generalKey();return Jwts.parser().setSigningKey(secretKey).parseClaimsJws(jwt).getBody();}
}

(3)创建过滤器,用于token验证 

/*** 鉴权过滤器 验证token*/
@Component
public class AuthorizeFilter implements GlobalFilter, Ordered {private static final String AUTHORIZE_TOKEN = "token";
​@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {//1. 获取请求ServerHttpRequest request = exchange.getRequest();//2. 则获取响应ServerHttpResponse response = exchange.getResponse();//3. 如果是登录请求则放行if (request.getURI().getPath().contains("/admin/login")) {return chain.filter(exchange);}//4. 获取请求头HttpHeaders headers = request.getHeaders();//5. 请求头中获取令牌String token = headers.getFirst(AUTHORIZE_TOKEN);
​//6. 判断请求头中是否有令牌if (StringUtils.isEmpty(token)) {//7. 响应中放入返回的状态吗, 没有权限访问response.setStatusCode(HttpStatus.UNAUTHORIZED);//8. 返回return response.setComplete();}
​//9. 如果请求头中有令牌则解析令牌try {JwtUtil.parseJWT(token);} catch (Exception e) {e.printStackTrace();//10. 解析jwt令牌出错, 说明令牌过期或者伪造等不合法情况出现response.setStatusCode(HttpStatus.UNAUTHORIZED);//11. 返回return response.setComplete();}//12. 放行return chain.filter(exchange);}
​@Overridepublic int getOrder() {return 0;}
}

 (4)测试:

如果不携带token直接访问,则返回401错误 

如果携带正确的token,则返回查询结果  

 

http://www.lbrq.cn/news/1053415.html

相关文章:

  • 做网站要多少像素/产品互联网推广
  • 国外有哪些做服装的网站有哪些方面/百度热词指数
  • 做二维码推送网站/国内前10电商代运营公司
  • 厦门手机网站建设公司/网站排名优化软件
  • 找人代做网站费用/百度商业平台
  • 北京企业建网站定制价格/全网搜索软件
  • 宣城做w网站的公司/企业管理培训机构
  • 天辰建设网站/2021年搜索引擎排名
  • 政府网站如何建设管理/seo公司赚钱吗
  • 石家庄便宜做网站/注册查询网站
  • wordpress适合做什么网站/广告公司广告牌制作
  • 北京品牌网站建设/网站制作详细流程
  • 做网上推广网站/互联网营销师题库
  • 地方网站推广/软文怎么写
  • 局网站建设情况/关键词怎么找出来
  • 包头市住房和城乡建设局官方网站/抖音关键词推广
  • 南京网站建设方案/怎么在百度上投放广告
  • 宝鸡哪有有做网站的/爱站网官网
  • 营销型网站建设案例/域名注册需要多久
  • wordpress 特色图片插件/手机网站搜索优化
  • 网站建设费用首选网络/广州信息流推广公司排名
  • 做b2b网站赚钱/google搜索关键词热度
  • 响应式网站自助建设平台/无锡今日头条新闻
  • 金融网站建设方案ppt/沈阳seo搜索引擎
  • wordpress 文章付费查看/网站seo分析
  • 快手点赞购买网站/网站流量分析的指标有哪些
  • 做美食网站的图片/app代理推广合作50元
  • 金融网站建设方案ppt模板/steam交易链接怎么看
  • 经典网站模板下载/国内做seo最好的公司
  • 电子商务网站建设与维护试卷/产品推广方案模板
  • 计算机网络:深入了解CIDR地址块如何利用VLSM进行子网划分的过程
  • B.10.01.5-电商系统的设计模式应用实战
  • Mybatis进阶
  • 数据挖掘2.6 Perceptron Modeling 感知器建模
  • 10.final, finally, finalize的区别
  • 力扣面试150(51/100)