技术应用:使用Spring Boot和Vue.js构建前后端分离的JWT认证应用
以下是一个简化的代码实例,展示了如何在Spring Boot后端使用JWT:
// 引入必要的依赖
import org.springframework.web.bind.annotation.*;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
@RestController
public class AuthController {
// 使用注入的AuthenticationManager进行认证
private final AuthenticationManager authenticationManager;
public AuthController(AuthenticationManager authenticationManager) {
this.authenticationManager = authenticationManager;
}
// 处理登录请求,生成JWT
@PostMapping("/login")
public ResponseEntity<?> login(@RequestBody LoginRequest request) {
try {
Authentication authentication = authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(request.getUsername(), request.getPassword())
);
// 生成JWT
String token = createJWT(authentication);
return ResponseEntity.ok(new JWTResponse(token));
} catch (AuthenticationException e) {
return ResponseEntity.unauthorized().build();
}
}
// 创建JWT的辅助方法
private String createJWT(Authentication authentication) {
String token = Jwts.builder()
.setSubject(authentication.getName())
.claim("authorities", authentication.getAuthorities())
.setIssuedAt(new Date())
.setExpiration(new Date((new Date()).getTime() + 864000000)) // 10天后过期
.signWith(SignatureAlgorithm.HS256, "your_secret_key".getBytes())
.compact();
return token;
}
// 登录请求的数据传输对象(DTO)
static class LoginRequest {
private String username;
private String password;
// 省略getter和setter
}
// 登录响应的数据传输对象(DTO)
static class JWTResponse {
private String token;
// 构造方法和getter方法省略
}
}
这段代码展示了如何在Spring Boot中创建一个简单的登录端点,该端点接受用户名和密码,使用AuthenticationManager
进行认证,认证成功后生成JWT。这个例子教会开发者如何在实际应用中实现登录流程和JWT的生成。
评论已关闭