项目_前后端分离认证解决方案_JWT认证

C++利用jwt-cpp和httplib实现登录和列表 注意:如果连接github网站网速不行的话,有可能会失败,多试几次总会成功的,注意安装顺序,jwt-cpp的安装需要依赖前面两个库。如题,其实c#可能更适合来做个项目,但是俺只会c++,无奈,找了好多帖子都不能简单的把这个服务器搭出来,所以自己上了。---准备工作完成---(如果上述过程中遇到问题,可以随时使用智谱清言问,这个ai比较靠谱(ps:这句话没有收费))首先你的电脑需要安装vcpkg,不知道为什么VS自带的vcpkg就是无法安装库,所以还得自己下一个。打开VS,创建控制台项目,随便起个项目名吧。 阅读详情

前后端分离认证解决方案——JWT认证

0、前言

这个笔记其实是大概去年10月份,即2021年11月份写的,因为当时11月份有一个新的项目,给学校做一个OA系统,第一次接触团队开发,所以我当时就学习了一下JWT认证,记录了这个笔记。

emm,当时需求也比较简单,所以只是入门性地学习而已,并没有深入地去学习,后面有机会再补吧哈哈哈……

1、何为 JWT

在这里插入图片描述

JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. This information can be verified and trusted because it is digitally signed. JWTs can be signed using a secret (with the HMAC algorithm) or a public/private key pair using RSA or ECDSA.

官网地址:https://jwt.io/introduction/

# 1.官方定义
- jsonwebtoken(JWT)是一个开放标准(RFC7519),它定义了一种紧凑的、自包含的方式,用于在各方之间以JSON对象安全地传输信息。
- 此信息可以验证和信任,因为它是数字签名的。
- jwt可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名


# 2.通俗理解
- JWT简称JSON Web Token,也就是通过JSON形式作为Web应用中的令牌,用于在个各个方面之间安全地将信息作为JSON对象传输。
- 在数据传输的过程中还可以完成数据加密,签名等相关处理。

2、JWT 能做什么?

  • 授权

这是JWT最常见的方案。

一旦用户登录,后续的每个请求将包括JWT,从而允许用户访问该令牌允许的路由、服务和资源。

单点登录是当今广泛使用JWT的一项功能,因为它的开销很小并且可以在不同的域中轻松使用。

  • 信息交换

JSON Web Token是在各方之间安全地传输信息的好方法。

因为可以对JWT进行签名(例如,使用公钥/私钥对),所以您可以确保发件人是他们所说的人。

此外,由于签名是使用标头和有效负载计算的,因此您还可以验证内容是否遭到篡改。


3、JWT 认证

3.1、基于传统的 Session 认证

3.1.1、认证方式

众所周知,HTTP协议本身是一种无状态的协议,也就是说,用户登录认证之后,下一次请求时还需要再进行用户认证才行。

因为根据HTTP协议,我们并不能知道是哪个用户发出的请求,所以为了我们的应用可以识别是哪个用户发起请求,我们只能在服务器中存储一份用户的登录信息,这份登录信息会在响应时传递给浏览器,并告诉浏览器保存为Cookie,下次请求时带上这份登录信息,这样我们的应用就可以识别是哪个用户发起的请求了,这就是传统的基于Session认证。

3.1.2、认证流程

在这里插入图片描述

3.1.3、存在的问题
  1. 每个用户经过认证之后,我们的应用都要在服务端做一次记录,以便识别该用户的请求,而通常来说,session都是保存在内存中,随着用户增多,服务端的开销会明显增大。

  2. 用户认证之后,服务端做认证记录,如果认证的记录保存在内存中的话,这就意味着该用户的下次请求必须在这台服务器上,这样子才能拿到授权的资源。

    但是,这种情况在分布式的应用上,会限制负载均衡的能力,这也就限制了应用的扩展能力。

  3. 因为是基于cookie来进行用户识别的, cookie如果被截获,用户就会很容易受到跨站请求伪造的攻击。

  4. 前后端分离的系统中,如果使用session每次都携带sessionId到服务器,服务器还要查询用户信息,若用户很多,这个信息都存储在服务器内存中,给服务器增加负担。

    在这里插入图片描述

    有可能会造成CSRF(跨站伪造请求攻击),session是基于cookie进行用户认证的,cookie如果被截获,用户就会很容易收到CSRF攻击。

    此外,sessionId是一个特征值,表达的信息不够丰富,不容易扩展,而且如果你后端应用是多节点部署,那么就需要实现session共享机制,这种做法不方便集群应用。


3.2、基于 JWT 认证

3.2.1、认证流程

在这里插入图片描述

  • 首先,前端通过Web表单将自己的用户名和密码发送到后端的接口,这一过程一般是一个HTTP的POST请求。建议的方式是通过SSL加密的传输(HTTPS协议),从而避免敏感信息被嗅探。

  • 后端核对用户名和密码成功后,将用户的id等其他信息作为JWT Payload(负载),将其与头部分别进行Base64编码拼接后签名,形成一个JWT(Token)。形成的JWT就是一个形同aaa.bbb.ccc的字符串。

    token head.payload.singurater

  • 后端将JWT字符串作为登录成功的返回结果返回给前端。前端可以将返回的结果保存在localStorage或sessionStorage上,退出登录时前端删除保存的JWT即可。

  • 前端在每次请求时将JWT放入HTTP Header中的Authorization位。

    (解决XSS和XSRF问题)

  • 后端检查是否存在,如存在验证JWT的有效性,例如:

    • 检查签名是否正确;

    • 检查Token是否过期;

    • 检查Token的接收方是否是自己(可选)。

  • 验证通过后后端使用JWT中包含的用户信息进行其他逻辑操作,返回相应结果。

3.2.2、JWT 优势
  1. 简洁(Compact):可以通过URL,POST参数或者在HTTP header发送,因为数据量小,传输速度也很快。
  2. 自包含(Self-contained):负载中包含了所有用户所需要的信息,避免了多次查询数据库。
  3. 因为Token是以JSON加密的形式保存在客户端的,所以JWT是跨语言的,原则上任何web形式都支持。
  4. 不需要在服务端保存会话信息,特别适用于分布式微服务。

4、JWT 的结构

JWT由三部分构成:

  1. 标头(Header)
  2. 有效载荷(Payload)
  3. 签名(Signature)

因此,JWT通常如下表示:aaa.bbbb.ccc(Header.Payload.Signature)

4.1、Header

Header标头通常由两部分组成:

  • 令牌的类型,即JWT
  • 所使用的签名算法,如HMAC、SHA256或者RSA
{
    "alg":"HS256",
    "typ":"JWT"
}

Header会使用Base64编码组成JWT结构的第一部分。

注:Base64是一种编码,也就是说,它是可以被翻译回原来的样子来的。它并不是一种加密过程。


4.2、Payload

令牌的第二部分是有效负载,其中包含声明。

声明是有关实体的声明(通常是用户)和其他数据的声明。

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

同样的,它会使用Base64编码组成JWT结构的第二部分。


4.3、Signature

前面两部分,即Header和Payload都是使用Base64进行编码的,我们可以反向解码得到里面的信息。

第三部分 ,即Signature,一个签证信息,这个信息由三部分组成:

  • Header(Base64编码后)
  • Payload(Base64编码后)
  • Secret(密钥)

这部分需要Header(Base64编码后)、Payload(Base64编码后)使用.连接组成的字符串,然后通过Header中指定的签名算法(HS256)进行签名。

签名的作用是保证JWT没有被篡改过。

//Java
String encodedString = base64UrlEncode(header) + "." + base64UrlEncode(payload);

String signature = HS256(encodedString, secret);

在这里插入图片描述

在这里插入图片描述

  • 注意:Secret是保存在服务器端的,JWT的签发生成也是在服务器端的,Secret就是用来进行JWT的签发和JWT的验证。所以,它就是你服务端的私钥,在任何场景都不应该流露出去。一旦客户端得知这个Secret, 那就意味着客户端是可以自我签发JWT了。

  • 签名的目的:最后一步签名的过程,实际上是对头部以及负载内容进行签名,防止内容被窜改。如果有人对头部以及负载的内容解码之后进行修改,再进行编码,最后加上之前的签名组合形成新的JWT的话,那么服务器端会判断出新的头部和负载形成的签名和JWT附带上的签名是不一样的。如果要对新的头部和负载进行签名,在不知道服务器加密时用的密钥的话,得出来的签名也是不一样的。

  • 信息安全问题:Base64是一种编码,是可逆的。因此,我们在JWT中,不应该在负载里面存放任何敏感信息,如用户密码等等。如果存储了密码在负载中,那么通过Base64解码就可以得到你的密码了。

    • 因此JWT适合用于向Web应用传递一些非敏感信息。
    • JWT还经常用于设计用户认证和授权系统,甚至实现Web应用的单点登录。

5、JWT 的使用

5.1、引入依赖

<!--引入jwt-->
<dependency>
  	<groupId>com.auth0</groupId>
  	<artifactId>java-jwt</artifactId>
  	<version>3.4.0</version>
</dependency>

5.2、生成Token

Calendar instance = Calendar.getInstance();
instance.add(Calendar.SECOND, 90);

//生成令牌
String token = JWT.create()
  .withClaim("username", "张三")//设置自定义用户名
  .withExpiresAt(instance.getTime())//设置过期时间
  .sign(Algorithm.HMAC256("token!Q2W#E$RW"));//设置签名 保密 复杂

//输出令牌
System.out.println(token);

/*
结果:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOlsicGhvbmUiLCIxNDMyMzIzNDEzNCJdLCJleHAiOjE1OTU3Mzk0NDIsInVzZXJuYW1lIjoi5byg5LiJIn0.aHmE3RNqvAjFr_dvyn_sD2VJ46P7EGiS5OBMO_TI5jg
*/

5.3、解析数据

根据令牌和签名解析数据

JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("token!Q2W#E$RW")).build();
DecodedJWT decodedJWT = jwtVerifier.verify(token);

System.out.println("用户名: " + decodedJWT.getClaim("username").asString());
System.out.println("过期时间: "+decodedJWT.getExpiresAt());

5.4、常见的异常信息

  • SignatureVerificationException:签名不一致异常

  • TokenExpiredException:令牌过期异常

  • AlgorithmMismatchException:算法不匹配异常

  • InvalidClaimException:失效的payload异常

在这里插入图片描述


6、封装工具类

public class JWTUtils {
    private static String TOKEN = "token!Q@W3e4r";
    
    /**
     * 生成token
     * @param map 传入payload
     * @return 返回token
     */
    public static String getToken(Map<String,String> map){
        JWTCreator.Builder builder = JWT.create();
        map.forEach((k,v)->{
            builder.withClaim(k,v);
        });
        Calendar instance = Calendar.getInstance();
        instance.add(Calendar.SECOND,7);	//设置7天过期
        builder.withExpiresAt(instance.getTime());
        return builder.sign(Algorithm.HMAC256(TOKEN)).toString();
    }
    
    /**
     * 验证token
     * @param token
     * @return
     */
    public static void verify(String token){
        JWT.require(Algorithm.HMAC256(TOKEN)).build().verify(token);
    }
    
    /**
     * 获取token中payload
     * @param token
     * @return
     */
    public static DecodedJWT getToken(String token){
        return JWT.require(Algorithm.HMAC256(TOKEN)).build().verify(token);
    }
}

7、Spring Boot整合 JWT

7.1、导入依赖

<!--Spring Boot + MyBatis + JWT-->
<dependency>
  <groupId>com.auth0</groupId>
  <artifactId>java-jwt</artifactId>
  <version>3.4.0</version>
</dependency>

<!--引入mybatis-->
<dependency>
  <groupId>org.mybatis.spring.boot</groupId>
  <artifactId>mybatis-spring-boot-starter</artifactId>
  <version>2.1.3</version>
</dependency>

<!--引入lombok-->
<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.18.12</version>
</dependency>

<!--引入druid-->
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid</artifactId>
  <version>1.1.19</version>
</dependency>

<!--引入mysql-->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.38</version>
</dependency>

7.2、编写配置

server.port=8989
spring.application.name=jwt

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/jwt?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=root

mybatis.type-aliases-package=edu.zhku.entity
mybatis.mapper-locations=classpath:edu/zhku/mapper/*.xml

logging.level.com.baizhi.dao=debug

7.3、创建数据库

这里采用最简单的表结构验证JWT使用。

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(80) DEFAULT NULL COMMENT '用户名',
  `password` varchar(40) DEFAULT NULL COMMENT '用户密码',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

在这里插入图片描述


7.4、编写实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain=true)
public class User {
    private String id;
    private String name;
    private String password;
}

7.5、编写Dao接口

@Mapper
public interface UserDAO {
    User login(User user);
}
<mapper namespace="com.baizhi.dao.UserDAO">
    <!--这里就写的简单点了毕竟不是重点-->
    <select id="login" parameterType="User" resultType="User">
        select * from user where name=#{name} and password = #{password}
    </select>
</mapper>

7.6、编写Service接口

public interface UserService {
    User login(User user);//登录接口
}
@Service
@Transactional
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDAO userDAO;
    @Override
    @Transactional(propagation = Propagation.SUPPORTS)
    public User login(User user) {
        User userDB = userDAO.login(user);
        if(userDB!=null){
            return userDB;
        }
        throw  new RuntimeException("登录失败~~");
    }
}

7.7、编写Controller

@RestController
@Slf4j
public class UserController {
    @Autowired
    private UserService userService;
    @GetMapping("/user/login")
    public Map<String,Object> login(User user) {
        Map<String,Object> result = new HashMap<>();
        log.info("用户名: [{}]", user.getName());
        log.info("密码: [{}]", user.getPassword());
        try {
            User userDB = userService.login(user);
            Map<String, String> map = new HashMap<>();//用来存放payload
            map.put("id",userDB.getId());
            map.put("username", userDB.getName());
            String token = JWTUtils.getToken(map);
            result.put("state",true);
            result.put("msg","登录成功!!!");
            result.put("token",token); //成功返回token信息
        } catch (Exception e) {
            e.printStackTrace();
            result.put("state","false");
            result.put("msg",e.getMessage());
        }
        return result;
    }
}

7.8、模拟登录失败

使用Postman发起请求,模拟登录失败。

在这里插入图片描述


7.9、模拟登录成功

使用Postman发起请求,模拟登录成功。

在这里插入图片描述


7.10、编写测试接口

前端带着Token去访问后端的接口。

@PostMapping("/test/test")
public Map<String, Object> test(String token) {
  Map<String, Object> map = new HashMap<>();
  try {
    JWTUtils.verify(token);
    map.put("msg", "验证通过~~~");
    map.put("state", true);
  } catch (TokenExpiredException e) {
    map.put("state", false);
    map.put("msg", "Token已经过期!!!");
  } catch (SignatureVerificationException e){
    map.put("state", false);
    map.put("msg", "签名错误!!!");
  } catch (AlgorithmMismatchException e){
    map.put("state", false);
    map.put("msg", "加密算法不匹配!!!");
  } catch (Exception e) {
    e.printStackTrace();
    map.put("state", false);
    map.put("msg", "无效token~~");
  }
  return map;
}

在这里插入图片描述

通过Postman请求接口:

  • Token无效(或者不携带Token)

    在这里插入图片描述

  • Token有效

    在这里插入图片描述


7.11、改进整合方法

使用上述方式每次都要传递Token数据,每个方法都需要验证Token代码冗余,不够灵活? 如何优化?

  • 如果是单体项目可以使用拦截器进行优化

  • 如果是分布式项目,可以使用网关进行优化

此案例为单体项目,则使用拦截器进行优化。

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  String token = request.getHeader("token");
  Map<String,Object> map = new HashMap<>();
  try {
    JWTUtils.verify(token);
    return true;
  } catch (TokenExpiredException e) {
    map.put("state", false);
    map.put("msg", "Token已经过期!!!");
  } catch (SignatureVerificationException e){
    map.put("state", false);
    map.put("msg", "签名错误!!!");
  } catch (AlgorithmMismatchException e){
    map.put("state", false);
    map.put("msg", "加密算法不匹配!!!");
  } catch (Exception e) {
    e.printStackTrace();
    map.put("state", false);
    map.put("msg", "无效token~~");
  }
  String json = new ObjectMapper().writeValueAsString(map);
  response.setContentType("application/json;charset=UTF-8");
  response.getWriter().println(json);
  return false;
}
@Component
public class InterceptorConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new JwtTokenInterceptor()).
          excludePathPatterns("/user/**")
          .addPathPatterns("/**");
    }
}

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlSWQiOiIyIiwidXNlck5hbWUiOiJzdWdhciIsImV4cCI6MTYzODk1MzIxNCwidXNlcklkIjoiMiJ9.XlPKaiRhuPXyeYtJT0juzvQ-n2LC5bHANp-Yp4g-f9E

学习教程:【编程不良人】JWT认证原理。

注:如有错误,敬请指正!!

shiro之前后端分离(基于jwt的token安全认证) 前后端分离项目与传统的一体式项目有所不同,用户安全验证的方式不太一样,前后端分离项目不能像一体式项目那样使用session验证,所以一般使用token验证。废话不多说,直接上代码。 主要代码: 一、JwtUtil Jwt即java web token,是比较成熟的token方案,JwtUtil里面有生成token的方法、校验token是否有效是否过期的方法、以及通过token获取解析值的方法,这里我们可以设置token的有效时间。 @Component public class JwtUtil { 阅读详情

相关推荐

cpp-jwt:C ++的JSON Web令牌库

cpp-jwt:C ++的JSON Web令牌库

不会吧,不会吧,不会还有人看了这篇文章还不精通JWT吧

一、什么是JWT JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. This information can be verified and trusted because it is digitally signed.

XiaoLin 3049

cpp-jwt-utils:C ++ JSON Web令牌实用程序

C ++ JSON Web令牌实用程序 该库提供了实用程序,用于生成,解析和验证用于通过REST API实施身份验证机制的JWT(JSON Web令牌)。 设置 使用柯南下载 该库旨在通过使用软件包管理器进行安装。 因此,您只需要在柯南食谱中添加以下要求: def requirements ( self ): self . requires ( "JWTUtils/1.0.0@systelab/stable" ) 仅以示例的形式设置了此代码的版本号。 将其替换为所需的软件包以进行检索。 由于此软件包在conan-center上不可用,因此您还需要在安装依赖项之前配置一个远程存储库: conan remote add systelab-public https://csw.jfrog.io/artifactory/api/conan/cpp-conan-production-l

使用JWT实现登录认证

session:存储再服务端,无法引用与分布式场景,并且需要占用服务端的资源cookie:存储再客户端,适用于分布式场景,但是存在安全问题,不支持垮域访问token:存储在localstorage中,更加灵活。

progammer10086的博客 2250

用于C ++的JSON Web令牌库-C/C++开发

CPP-JWT一个用于JSON Web令牌(JWT)的C ++ 14库。该库建有很多:red_heart:︎,可以更轻松地使用JWT。 由Arun Muralidharan撰写。 目录什么是示例API Philos CPP-JWT一个用于JSON Web令牌(JWT)的C ++ 14库这个小库内置了许多:red_heart:built,可以更轻松地使用JWT。 作者:阿伦·穆拉利达兰(Arun Muralidharan)。 目录什么是示例API哲学支持外部依赖项...编译器支持安装参数声明数据类型高级示例错误代码和异常其他标头数据有待改进的东西许可是什么? 对于未启动的用户,JSON Web令牌(JWT)是基于JSON的标准(RFC-7519),对于

一个用于在c++ - Thalhammer/jwt-cpp中创建和验证json web令牌的头库

一个用于在c++ - Thalhammer/jwt-cpp中创建和验证json web令牌的头库-源码

前后端分离项目必备:Flask 中 JWT 认证的落地解决方案

本文分享 Flask 中 JWT 认证的实用方案,包括手动编码实现、利用Flask-JWT-Extended扩展集成,以及结合Flask-RESTful的 API 认证实践。内容覆盖 Token 生成、验证、有效期管理及 Refresh 机制,附关键代码示例。同时强调生产环境安全要点,如密钥管理、HTTPS 部署等。适合 Web 开发者快速掌握 Flask JWT 认证核心逻辑与落地技巧,提升应用接口安全性,全文简明易懂,侧重实战与效率。

cuiwin的专栏 773

带隙基准电路设计实战:从HSPICE仿真到Virtuoso版图全流程解析

在模拟集成电路设计中,基准电压源是确保系统精度与稳定性的核心模块。其基本原理在于巧妙结合具有正、负温度系数的电压,通过加权求和实现近似零温度系数的稳定输出,这一特性对于高精度数据转换器、电源管理芯片等至关重要。从工程实践角度,利用HSPICE进行深入的直流工作点、温度扫描和工艺角仿真,是验证电路性能、优化温度系数和电源抑制比的关键步骤。而借助Cadence Virtuoso进行版图实现时,必须重点关注电阻与BJT的匹配布局、敏感节点的保护以及电源完整性设计,以确保设计意图在硅片上得以准确呈现。通过完整的从前

weixin_29181861的博客 286

JWT身份认证的使用方式

JWT概述说明,组成部分,安装导入相关包,定义secret秘钥,获取用户信息,捕获解析JWT失败后产生的错误

qq_58946786的博客 1550

Amesim与Simulink联合仿真:S-Function接口配置与实战避坑指南

本文详细介绍了Amesim与Simulink联合仿真中S-Function接口的配置方法与实战避坑指南。从环境搭建、编译器配置到S-Function接口实战,逐步解析关键步骤与常见问题解决方案,帮助工程师高效实现多领域系统仿真,特别适合汽车、航空航天等复杂系统建模场景。

weixin_29173777的博客 344

C# OpenCV机器视觉:红外体温检测

阿强长舒一口气,脸上露出了自信的笑容:“好了,万事俱备,只欠东风,接下来就看我的了!在这热图像里,不同的颜色代表着不同的温度区域,就好比一幅用温度绘制的抽象画,红色通常表示高温,蓝色则代表低温,通过解读这幅画,就能大致了解物体表面的温度分布情况。” 阿强兴奋得一拍大腿,“这不就像是找到了隐藏在黑暗中的线索,只要顺着这些红外线的踪迹,就能揪出体温异常的潜在风险,守护大家的健康啦。带着这份坚定的信念,阿强又投入到新的科技研发中,他相信,只要大家齐心协力,用科技点亮希望之光,就一定能迎来更加美好的明天。

xcwzj123的专栏 3150

Spring Security + JWT 实战:前后端分离项目的认证授权方案(从入门到落地)

本文介绍了SpringSecurity与JWT结合的认证授权方案。,JWT负责无状态传递用户信息,避免ACM的Session共享问题。文章详细说明了实现步骤:1)引入SpringSecurity和JJWT依赖;2)自定义UserDetailsService查询用户;3)编写JWT工具类处理Token生成与验证;4)配置JWT过滤器拦截请求;5)设置SecurityConfig处理接口权限和跨域问题。特别强调了密码必须BCryptisar加密存储、需要关闭CSRF防护、可通过Redis实现Token黑名单等注

Pretend________的博客 1167

线上专利申请(超详细)| 签名确认

在【法人登录】页面点击【证书登录】按钮,弹出证书登录提示框,点击【确 认】按钮,进入到输入证书密码页面,点击【取消】按钮,取消本次操作。企业在提交申请时,需要增加签名,如使用企业账户点击提交,会弹出“法人、代理机构不能签名,请使用经办人签名”,这个时候就需要换个账号了。在需要签名时,将专利官网的登录方式点击法人登录,选择扫码登录,使用移动端经办人账户的扫一扫功能扫描登录。登录完成后,再点击签名,使用移动端扫一扫功能,扫描签名,输入证书号,确认签名,并提交。最后,祝大家的申请都成功!

weixin_62112323的博客 9111

SpringBoot前后端分离项目使用SpringSecurity+JWT做权限认证,修改自定义认证过滤器的访问路径

写在前面: 这个问题在网上一直找不到我想要的答案,是通过我自己不断试错最后才成功的,故写出来分享一下。这是我的第一篇分享博客,如果有哪里写的不好的地方,请多多见谅! 需求提出: SpringSecurity自带的权限认证有很多种,有Form Login的形式,也有http basic的形式等等。我们之前的JSP项目是通过<form>标签表单提交来进行登录认证的,这时候使用SpringSecurity的Form Login认证是最适合的,并且我们也可以在配置类中可以使用HttpSecur.

AmbitiousJun的博客 2679

Temporal Anti-Aliasing(时域抗锯齿TAA)

首先说一下走样:一般分为时域走样(如旋转车轮)和空域走样(锯齿),但在 TAA 技术是采用时域相关叠加混合技术来解决空域走样的问题。 简单看一下空域抗锯齿 (Spatial Anti-Aliasing, SAA)相关技术,最普及的莫过于 MSAA,被各大渲染引擎采用,但是 MSAA 并不适用于延迟渲染 (Deferred Rendering),随之出现了很多基于形态学的后处理抗锯齿技术,如 MLAA,FXAA,SMAA 等(具体看参见图形_反走样技术总结相关介绍),虽然他们表现良好且支持延迟渲染,但是都会面

qq_35312463的博客 1万+

深入解析ViT中的RoPE旋转位置编码:原理、实现与视觉应用

本文深入解析了ViT中的RoPE旋转位置编码原理、实现及其在视觉任务中的应用。RoPE通过旋转变换巧妙地将相对位置信息融入注意力计算,解决了传统绝对位置编码外推性差的问题,在图像分类、目标检测及生成任务中展现出更优的泛化能力和灵活性。

alice7model的博客 705

Spring Security 的前后端分离项目的权限方案,从0到0.8

思路分析 ①通过前面的分析,我们发现Spring Boot集成了默认的Spring Security之后虽然已经具备了认证授权的功能,但存在两个在实际项目中不适用的问题: 默认的登录页面 默认的用户名密码 ②同时,前面我们也说一般web应用的安全管理都是通过两条线完成的,Spring Security也是: 认证 授权 ③此外,我们结合前后端分离项目中常用的认证授权流程......

qq_45043381的博客 3151

SAP_SD模块信用管理-最早未清项判断逾期

在 SAP SD 模块的信用管理(Credit Management) 中,系统可以通过 最早未清项(Oldest Open Item) 来判断客户是否存在逾期,从而影响订单的信用检查结果。例如: 定义最大未清项目%为1%,未清天数为1天,即允许客户“逾期1天的未清应收帐款/该客户的应收帐款余额”最大比例为1%,若超过1%则将被信用冻结。的信用检查功能,用于判断客户是否有账龄过长的未清款项,并据此决定是否允许新的销售订单继续处理。然后在查看客户的信贷信息可以看到,最早的未清信息显示在系统中。

我小时候很黑的博客 863

31-jwt认证

JWT全称JSONWebToken是一种跨域认证解决方案,属于一个开放的标准,它规定了了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下。我们需要定制自己的需求来决定JWT中保存哪些数据,比如我们规定在JWT中要存储username信息,那么我们定义一个MyClaimsvarMySecret=[]byte("夏天夏天悄悄过去")...

weixin_38753143的博客 429

ROS从入门到精通0-1:教程导读

ROS概念太多太复杂?ROS从入门到精通系列订阅必看

FRIGIDWINTER的博客 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SpringBoot+Shiro+Jwt实现登录认证

SpringBoot+Shiro+Jwt实现登录认证. https://www.jianshu.com/p/9b6eb3308294 Shiro步步为营--如何优雅地与JWT集成https://blog.youkuaiyun.com/pengjunlee/article/details/95600843 Shiro整合JWT+Token过期刷新,全都帮你整好了 https://www.sundayfi...

qq_18932003的博客 1430

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

在gin框架中使用JWT

留 JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下。 什么是JWT? JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下。 为什么需要JWT? 在之前的一些web项...

Admin 374

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

jwt的学习

JWT 什么是JWT jwt:json web token 是目前来说,最流行的跨域认证解决方案。 身份认证 验证身份,鉴定权限。 服务端渲染推荐使用session认证机制 前后端分离推荐使用JWT认证机制 工作原理和流程 用户的信息通过Token字符串的形式,保存在客户端浏览器中。 服务器通过还原Token字符串的形式来认证用户的身份。 JWT的组成部分 分为三部分组成:Header(头部),Payload(载荷),Signature(签名) Token是字符串,三者之间使用英文的.分割。【h

weixin_48864616的博客 2641

Nodejs -- 前后端身份认证概念及在Express中使用认证(Session,Cookie,JWT)

4 在Express项目中使用Session认证 4.1 安装express-session中间件 4.2 配置express-session中间件 4.3 向Session中存数据 4.4 从Session中取数据 4.5 清空Session 5 JWT认证机制 5.1 了解Session认证的局限性 5.2 什么是JWT 5.3 JWT的组成部分 5.4 JWT的三个部分各自代表的含义 5.5 JWT的使用方式 6 在Express中使用JWT 6.1 安装JWT相关的包 6.2 导入JWT相关的包

Qlz的博客 1189

JWT理解

JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token 实现方式,目前多用于前后端分离项目和 OAuth2.0 业务场景下。理解:用于取代传统的Session_id,给登录的用户设置一个全局标识符token。注册指定路由,调用函数理解:先检验账户密码正确与否,然后调用上面的token生成器用用户名生成token字串,然后打包到token返回。如果账户密码不对,返回一个json,告诉服务器鉴权失败。// 用户发送用户名和密码过来if err!

m0_50973548的博客 127

JWT学习笔记_02:简单使用+SpringBoot整合

JWT学习笔记_下篇 本文基于B站UP主 【编程不良人】 视频教程 【 JWT认证原理、流程整合springboot实战应用,前后端分离认证的解决方案】 进行整理记录,仅用于个人学习/交流使用 视频连接:https://www.bilibili.com/video/BV1i54y1m7cP 官方资料:http://www.baizhiedu.xin JWT学习笔记上篇: JWT学习笔记下篇: 目录标题JWT学习笔记_下篇六、在SpringBoot中使用JWT引入依赖生成Token根据令牌和签名解析数据J

耿鬼不会笑的博客 571
上一篇: 中间件_Redis_01_Redis的简介和安装
下一篇: 项目_一小时零基础入门Swagger2框架
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

窝在角落里学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值