网站建设的知识和技能,wordpress固定链接设置文章连续性,深圳网站建设公司流程,贵阳美丽乡村建设网站目录
会话技术 Cookie
Session
JWT
JWT生成
JWT校验 会话技术 会话 打开浏览器#xff0c;访问web服务器的资源#xff0c;会话建立#xff0c;直到有一方断开连接#xff0c;会话结束。在一次会话中可以包含多次请求与响应 会话跟踪 一种维护浏览器的方法 服务器需要…目录
会话技术 Cookie
Session
JWT
JWT生成
JWT校验 会话技术 会话 打开浏览器访问web服务器的资源会话建立直到有一方断开连接会话结束。在一次会话中可以包含多次请求与响应 会话跟踪 一种维护浏览器的方法 服务器需要识别多次请求是否来自于同一浏览器 以便在同一次会话的多次请求间共享数据 会话跟踪方案 客户端会话跟踪技术 Cookie 服务端会话跟踪技术 Session 令牌技术 Cookie 优点 HTTP协议中支持的技术 缺点 移动端App无法使用Cookie 不安全用户可以自己禁用Cookie Cookie不能跨域(跨域 协议IP/域名端口中有不同的) Slf4j
RestController
public class SessionController {GetMapping(/c1)public Result cookie1(HttpServletResponse response){response.addCookie(new Cookie(login_username,awaw));return Result.success();}GetMapping(/c2)public Result cookie2(HttpServletRequest request){Cookie[]cookies request.getCookies();for(Cookie cookie : cookies){if(cookie.getName() login_username ){System.out.println(login_username cookie.getValue());}}return Result.success();}
}
Session 优点 存储在服务器 安全 缺点 服务器集群情况下无法直接使用Session 移动端App无法使用Session 不安全用户可以自己禁用Session Session不能跨域 Slf4j
RestController
public class SessionController {GetMapping(/s1)public Result session1(HttpSession session){log.info(HttpSession-s2{},session.hashCode());session.setAttribute(loginUser,tom);return Result.success();}GetMapping(/s2)public Result session2(HttpServletRequest request){HttpSession session request.getSession();log.info(HttpSession-s2{},session.hashCode());Object loginUser session.getAttribute(loginUser);log.info(loginUser: {},loginUser);return Result.success(loginUser);}
}
JWT Json Web Token 定义了一种简洁的自包含的格式用于在通信双方以json数据格式安全的传输信息。由于数字签名的存在这些信息是可靠的 组成 第一部分 header 头记录令牌类型签名算法等 第二部分 Payload 有效载荷携带一些自定义信息默认信息等 第三部分 Signature 签名防止Token被修改确保安全性。将headerPayload加入执行密匙通过指定签名算法计算而来 在pom.xml中引入JWT令牌依赖 dependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactIdversion0.9.1/version/dependency
JWT生成
SpringBootTest
class SpringbootMybatisCrudApplicationTests {Autowiredprivate EmpMapper empMapper;Testpublic void testGenJwt(){MapString,Objectclaims new HashMap();claims.put(id,1);claims.put(name,tom);String jwt Jwts.builder().signWith(SignatureAlgorithm.HS256,awaw)//签名算法.setClaims(claims)//自定义内容(载荷).setExpiration(new Date(System.currentTimeMillis() 3600 * 10000))//有效期.compact();System.out.println(jwt);}
} JWT校验 JWT检验时使用的签名秘钥必须和生成JWT令牌时使用的秘钥是配套的 SpringBootTest
class SpringbootMybatisCrudApplicationTests {Autowiredprivate EmpMapper empMapper;Testpublic void testParseJwt(){Claims claims Jwts.parser().setSigningKey(awaw)//指定签名密匙.parseClaimsJws(eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoidG9tIiwiaWQiOjEsImV4cCI6MTcwNDY0NjU4OH0.EKF6hnJvMExOBaJHE71OZmQBN0Sbcc3sH9FHkBq8sDY)//解析令牌.getBody();System.out.println(claims);}
}