介绍 1简介
2项目整合
2.1 JWT整合
2.1.1 JWT工具类
这期内容当中小编将会给大家带来有关如何在Springboot中使用Spring Security实现一个JWT认证,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
1简介
Spring Security作为成熟且强大的安全框架,得到许多大厂的青睐。而作为前后端分离的SSO方案,JWT也在许多项目中应用。本文将介绍如何通过Spring Security实现JWT认证。
用户与服务器交互大概如下:
- <李>
客户端获取JWT,一般通过发布方法把用户名/密码传给服务器;
李> <李>服务端接收到客户端的请求后,会检验用户名/密码是否正确,如果正确则生成JWT并返回;不正确则返回错误;
李> <李>客户端拿到JWT后,在有效期内都可以通过JWT来访问资源了,一般把JWT放在请求头;一次获取,多次使用;
李> <李>服务端校验JWT是否合法,合法则允许客户端正常访问,不合法则返回401。
2项目整合
我们把要整合的Spring Security和智威汤逊加入到项目的依赖中去:
& lt; dependency> ,& lt; groupId> org.springframework.boot ,& lt; artifactId> spring-boot-starter-web & lt;/dependency> & lt; dependency> ,& lt; groupId> org.springframework.boot ,& lt; artifactId> spring-boot-starter-security & lt;/dependency> & lt; dependency> ,& lt; groupId> io.jsonwebtoken ,& lt; artifactId> jjwt ,& lt; version> 0.9.1 & lt;/dependency>
2.1 JWT整合
2.1.1 JWT工具类
JWT工具类起码要具有以下功能:
- <李>
根据用户信息生成JWT;
李> <李>校验JWT是否合法,如是否被篡改,是否过期等;
李> <李>从智威汤逊中解析用户信息,如用户名,权限等;
李>具体代码如下:
@ component public class  JwtTokenProvider { ,@Autowired JwtProperties  jwtProperties; ,@ autowired ,private CustomUserDetailsService  userDetailsService; ,private String  secretKey; ,@PostConstruct ,protected void  init (), { 时间=secretKey 才能;Base64.getEncoder () .encodeToString (jwtProperties.getSecretKey () .getBytes ()); ,} ,public String  createToken (String 用户名,List,角色),{ Claims 才能;Claims =, Jwts.claims () .setSubject(用户名); claims.put才能(“roles",,角色); Date 才能;你=,new 日期(); Date 才能;validity =, new 日期(now.getTime (), +, jwtProperties.getValidityInMs ()); return 才能Jwts.builder ()//,,,.setClaims(声称)//,,,.setIssuedAt(现在)//,,,.setExpiration(有效性)//,,,.signWith (SignatureAlgorithm.HS256, secretKey)//,,,.compact (); ,} ,public Authentication  getAuthentication (String 令牌),{ UserDetails 才能;UserDetails =, this.userDetailsService.loadUserByUsername (getUsername(令牌)); return 才能;new  UsernamePasswordAuthenticationToken (userDetails,,,,,, userDetails.getAuthorities ()); ,} ,public String  getUsername (String 令牌),{ return 才能;Jwts.parser () .setSigningKey (secretKey) .parseClaimsJws(令牌).getBody () .getSubject (); ,} ,public String  resolveToken (HttpServletRequest 要求),{ String 才能;bearerToken =, req.getHeader (“Authorization"); if 才能;(bearerToken !=, null ,,, bearerToken.startsWith (“Bearer “)), { ,,return bearerToken.substring (7); ,,} return 才能;零; ,} ,public boolean  validateToken (String 令牌),{ try {才能 ,,Jws 如何在Springboot中使用Spring Security实现一个JWT认证