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

邯郸哪里有做网站的李google chrome官网入口

邯郸哪里有做网站的李,google chrome官网入口,深圳网站建设知了网络,php大型网站开发书籍一、概述 JWT全称:**JSON Web Token **(https://jwt.io/)定义了一种简洁的、自包含的格式,用于通信双方以json数据格式安全的传输信息。组成: ①第一部分:Header(头),记录令牌类型、签名算法等。例如: (“alg”:" HS256"," type":“…

一、概述

  • JWT全称:**JSON Web Token **(https://jwt.io/)
  • 定义了一种简洁的、自包含的格式,用于通信双方以json数据格式安全的传输信息。
  • 组成:
    ①第一部分:Header(头),记录令牌类型、签名算法等。例如: (“alg”:" HS256"," type":“JWT”)
    ②第二部分: Payload(有效载荷),携带一些自定义信息、默认信息等。例如: {“id”.“1”,“username”:“Tom”}
    ③第三部分: Signature(签名),防止Token被篡改、确保安全性。将header、payload,并加入指定秘钥,通过指定签名算法计算而来。

在这里插入图片描述

Base64:是一种基于64个可打印字符(A-Z a-z 0-9 +/)来表示二进制数据的编码方式。

二、令牌生成

1、引入坐标

    <!--java-jwt令牌--><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>4.4.0</version></dependency>

2、调用API生成令牌

    @Testpublic void testGen(){HashMap<String, Object> claims = new HashMap<>();claims.put("id",1);claims.put("username","张三");//生成jwt的String token = JWT.create().withClaim("user", claims)//通过添加载荷的方式将用户信息添加进去.withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 12)) //添加过期时间 12h.sign(Algorithm.HMAC256("arata"));//指定加密算法 加密秘钥System.out.println(token);}

在这里插入图片描述

3、验证生成的令牌

    @Testpublic void testParse(){//定义字符串模拟生成的token令牌String token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9" +".eyJ1c2VyIjp7ImlkIjoxLCJ1c2VybmFtZSI6IuW8oOS4iSJ9LCJleHAiOjE3NDcxNjc1MjN9" +".KejB84CGQw5r602-wUk-Ew0YE2nLSaLvLHhY2S47GCw";JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("arata")).build();//申请JWt验证器(秘钥与算法和加密时保持一致)DecodedJWT decodedJWT = jwtVerifier.verify(token);//验证token,生成一个解析后的jwt对象Map<String, Claim> claims = decodedJWT.getClaims();//可以从中获取所有载荷System.out.println(claims.get("user")); //获取键名为user的载荷,获取成功的话代表认证成功
//如果篡改了头部和载荷部分的数据,那么验证失败工
//如果秘钥改了,验证失败
//token过期}

在这里插入图片描述

三、封装为JWT工具类

package org.example.utils;import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;import java.util.Date;
import java.util.Map;public class JwtUtil {private static final String KEY = "itheima";//接收业务数据,生成token并返回public static String genToken(Map<String, Object> claims) {return JWT.create().withClaim("claims", claims).withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 12)).sign(Algorithm.HMAC256(KEY));}//接收token,验证token,并返回业务数据public static Map<String, Object> parseToken(String token) {return JWT.require(Algorithm.HMAC256(KEY)).build().verify(token).getClaim("claims").asMap();}}

四、集成JWT

    @PostMapping("/login")public Result<String> login(@Pattern(regexp = "^\\S{5,16}$")String username,@Pattern(regexp = "^\\S{5,16}$")String password){//根据用户名查询userUser user = userService.findByUserName(username);//判断是否查询到if (user == null){return Result.error("用户不存在");}//判断密码是否正确String md5String = Md5Util.getMD5String(password);if(md5String.equals(user.getPassword())){//登陆成功//生成tokenMap<String, Object> claims = new HashMap<>();claims.put("id",user.getId());claims.put("username",user.getUsername());String token = JwtUtil.genToken(claims);return Result.success(token);}return Result.error("密码错误");}

使用:

    @GetMapping("/list")public Result<String> list(@RequestHeader(name = "Authorization") String token, HttpServletResponse response){//在提供服务之前先验证token//用户登录成功后,系统会自动下发WT令牌,// 然后在后续的每次请求中,浏览器都需要在请求头header中携带到服务端,// 请求头的名称为Authorization,值为登录时下发的JWI令牌。try {Map<String, Object> claims = JwtUtil.parseToken(token);return Result.success("所有的文章数据列表");} catch (Exception e) {//没有验证成功的话会报错,所以这里我们直接抛出异常response.setStatus(401);throw new RuntimeException(e);}}

五、优化(拦截器)

在这里插入图片描述
在程序中会存在很多controller,而每个controller会有很多接口,都要校验吗?使用拦截器
在这里插入图片描述

1、重写方法编写拦截器

在这里插入图片描述

package org.example.interceptors;import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.example.pojo.Result;
import org.example.utils.JwtUtil;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;import java.util.Map;@Component
public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//拦截下来之后先进行令牌验证//获取tokenString token = request.getHeader("Authorization");//解析Tokentry {Map<String, Object> claims = JwtUtil.parseToken(token);//验证成功,放行return true;} catch (Exception e) {//没有验证成功的话会报错,所以这里我们直接抛出异常response.setStatus(401);//验证不成功,不放行return false;}}
}

2、在配置类中注册拦截器(添加拦截器使其生效)

在这里插入图片描述

package org.example.config;import org.example.interceptors.LoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate LoginInterceptor loginInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {//登录接口和注册接口不拦截registry.addInterceptor(loginInterceptor).excludePathPatterns("/user/login","/user/register");}
}
http://www.dtcms.com/wzjs/73247.html

相关文章:

  • 山东省乡镇网站建设推广赚钱的平台有哪些
  • 模特公司网站源码nba湖人队最新消息
  • 做qq空间动态皮肤网站建立网站有哪些步骤
  • iis7部署网站百度搜索关键词推广
  • 怎样找公司做单的网站重庆网站seo技术
  • html可以做网站后台吗seo软文是什么
  • 网站制作需要什么商丘搜索引擎优化
  • 做网站之前需要准备什么条件天气预报最新天气预报
  • 致设计网站百度软件应用市场
  • c 网站做微信支付功能说说seo论坛
  • 自己做网站的网址北京建站公司
  • python 网站开发教程百度手机提高关键词排名
  • 四川省住房和城乡建设厅网站发关键词挖掘工具
  • 专业的网站开发网站模板平台资源
  • 网页设计个人博客武汉网站seo公司
  • 公司宣传册设计与制作模板南宁seo公司
  • 网站 not found独立站搭建要多少钱
  • 厦门网站制作公司seo网站推广经理招聘
  • windows10PHP 网站建设推广接单平台
  • 网站 界面中国新冠疫情最新消息
  • 公文写作 课程中心网站建设域名查询 ip
  • 关于做ppt的网站百度怎么发布自己的信息
  • 国际机票网站建设百度手机助手下载安装
  • 深圳网站建设51duoshi网站建设公司seo关键词
  • squarespace wordpress湖南竞价优化哪家好
  • 广州做营销型网站哪家好站长统计app软件大全
  • 域名不作网站用途seo精灵
  • 做团购的网站福州短视频seo机会
  • 温州外贸公司网站建设公司排名搜索指数查询平台
  • 网站接广告能赚多少钱怎么样把广告做在百度上