来为你讲解一下如何使用 SpringBoot 进行 jwt 身份验证的方法示例攻略。
简介
JWT,即 JSON Web Token,是一种用于身份验证的标准。在 Spring Boot 中使用 JWT 进行身份验证,可以避免使用传统的 session 和 cookie 方式进行身份验证所存在的一些问题。本文将为大家讲解如何在 Spring Boot 中使用 JWT 进行身份验证的方法示例。
1. 添加依赖
在 Spring Boot 中,可以使用一些现成的组件来实现 JWT 的生成和验证。我们可以使用 jjwt 或者 auth0 组件,具体建议按需选择。
以 auth0 组件为例,在 pom.xml 文件中添加以下依赖:
<!-- auth0 组件 -->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.18.1</version>
</dependency>
<!-- 封装的 jwt 工具类 -->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>auth0</artifactId>
<version>1.13.0</version>
</dependency>
2. 实现认证授权逻辑
在实现认证授权逻辑之前,需要为项目添加一个 JWT 工具类,用于生成和验证 token。
以下是一个简单的 JWT 工具类实现:
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component("jwtUtil")
public class JwtUtil {
private static final String SIGN_SECRET = "my_secret_123456"; // 密钥
private static final long EXPIRATION_TIME = 30 * 60 * 1000; // 过期时间
/**
* 生成 token
* @param username 用户名
* @return token
*/
public String createToken(String username) {
Date now = new Date();
Date expiresAt = new Date(now.getTime() + EXPIRATION_TIME);
return JWT.create().withIssuer("my-website")
.withSubject(username)
.withExpiresAt(expiresAt)
.withIssuedAt(now)
.sign(Algorithm.HMAC256(SIGN_SECRET));
}
/**
* 验证 token
* @param token token
* @return 是否验证成功
*/
public boolean verifyToken(String token) {
try {
JWT.require(Algorithm.HMAC256(SIGN_SECRET)).build().verify(token);
return true;
} catch (Exception e) {
return false;
}
}
/**
* 获取 token 中的用户名
* @param token token
* @return 用户名
*/
public String getUsername(String token) {
DecodedJWT jwt = JWT.decode(token);
return jwt.getSubject();
}
}
然后,我们可以在代码中使用该工具类生成和验证 token。
以下是一个示例实现,用于在登录时生成 token。
@RestController
public class UserController {
@Autowired
private JwtUtil jwtUtil;
@Autowired
private UserService userService;
/**
* 登录,成功则返回 token
* @param username 用户名
* @param password 密码
* @return token
*/
@PostMapping("/login")
public ResponseEntity<String> login(@RequestParam String username, @RequestParam String password) {
User user = userService.findUserByUsername(username);
if (user != null && user.getPassword().equals(password)) {
String token = jwtUtil.createToken(username);
return ResponseEntity.ok(token);
} else {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("用户名或密码错误");
}
}
}
以下是一个示例实现,用于验证需要授权的操作。
@RestController
public class UserController {
@Autowired
private JwtUtil jwtUtil;
/**
* 获取用户信息,需要 token 鉴权
* @param request 请求
* @return 用户信息
*/
@GetMapping("/user")
public ResponseEntity<String> user(HttpServletRequest request) {
String token = request.getHeader("Authorization");
if (StringUtils.isEmpty(token)) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("token 为空");
}
String username = jwtUtil.getUsername(token);
if (StringUtils.isEmpty(username)) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("token 不正确");
}
return ResponseEntity.ok("用户信息:" + username);
}
}
3. 示例操作
首先,我们要模拟一个用户登录的场景。可以使用 Postman 工具,发送以下 POST 请求:
POST http://localhost:8080/login
Content-Type: application/x-www-form-urlencoded
username=admin&password=admin123
如果登录成功,将返回上一步实现中的 token。然后,我们再使用 Postman 工具,发送以下 GET 请求:
GET http://localhost:8080/user
Authorization: [token]
其中,[token] 为登录成功后返回的 token。如果 token 正确,则将返回用户信息。
总结
通过以上示例,我们学习了如何使用 Spring Boot 进行 jwt 身份验证的方法。首先,我们添加了 auth0 组件,在 pom.xml 中引入了相关依赖。然后,我们实现了认证授权逻辑,包括一个 JWT 工具类和相关账户的登录和需要鉴权的操作接口。最后,我们通过 Postman 工具模拟用户登录和获取用户信息的操作,成功获取到了用户信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot 使用jwt进行身份验证的方法示例 - Python技术站