Spring Boot 是一种用于构建应用程序的流行框架。它旨在简化应用程序开发,并提供了许多开箱即用的功能,例如自动配置和依赖管理。
Spring Boot 认证是 Spring 官方提供的认证计划。认证分为三个级别:Associate、Professional 和 Expert。每个级别都涵盖不同的 Spring Boot 技能和知识。
先放上github的链接 GraphQL demo GraphQL要实现权限认证主要是依靠 directive 先创建一个 directive 接下来就是对 directive 进行配置 文件写法 至此,对GraphQL的权限认证配置就完成了。AuthContextHolder 的实现可以看这片文章 Java权限认证实现原理
1、JWT的构成
- 头部(header):描述该JWT的最基本的信息,如类型以及签名所用的算法。
- 负载(payload):存放有效信息的地方。
- 签证(signature):base64加密后的header、base64加密后的payload和密钥secret加密后组成。
2、整合JWT
2.1 引入JWT依赖
2.2 编写JWTUtils工具类
public class JWTUtils {
private static final String SING=@#$%^&*;
// 生成token
public static String getToken(Mapmap){
Calendar instance = ();
//创建jwt builder
builder = ();
//设置签名
String token = (256(SING));
return token;
//验证令牌
public static void verifyToken(String token){
JWTVerifier require = (256(SING))();
//获取token信息
public static DecodedJWT getTokenInfo(String token){
DecodedJWT verify = (256(SING))()(token);
return verify;
2.3 编写拦截器
public class JWTInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (()(())) {
(OPTIONS请求,放行);
return true;
HashMapmap = new HashMap>();
String token = (token);
return true;
}catch (SignatureVerificationException e){
(msg,无效签名!);
}catch (TokenExpiredException e){
(msg,token过期!);
}catch (AlgorithmMismatchException e){
(msg,token加密算法不一致);
}catch (Exception e){
(msg,无效签名!);
(state,404);
(path,/login);
//将map转化为字符串返回给前端
String result = new ObjectMapper()(map);
(application/json;charset=UTF-8);
()(result);
return false;
注意:
1、token存放在请求的header中;
2、在前后端分离的项目中,发送的GET/POST请求实则为两次请求。 第一次请求为OPTIONS请求,第二次请求才是GET/POST请求;在OPTIONS请求中,不会携带请求头的参数,会导致在拦截器上获取请求头为空,自定义的拦截器拦截成功。 第一次请求不能通过,就不能获取第二次的请求。 所以需要在拦截器中加上如下代码来判断是否为OPTIONS请求,对于OPTIONS请求直接放过。
if (()(())) {
(OPTIONS请求,放行);
return true;
2.4 配置拦截器
@Configuration
public class IntercepterConfg implements WebMvcConfigurer {
public void addInterceptors(InterceptorRegistry registry) {
(new JWTInterceptor())
2.5 编写controller
@RestController
public class LoginController {
private UserService userService;
@Autowired
public LoginController(UserService userService) {
= userService;
@PostMapping(/login)
public Result register(User user){
HashMapmap = new HashMap>();
(username,());
String token = (map);
HashMapdata = new HashMap>();
(token,token);
return (200,登录成功!,data);
@GetMapping(/main)
public Result tomain(){
return (200,访问成功,null);
2.6使用Postman测试
- 未登录前访问127.0.0.1:8888/main
- 先登录再访问127.0.0.1:8888/main
在 Spring Boot 中,登录权限的控制通常使用 Security 模块来实现。下面是一些基本步骤:
-mode=method
-denied-url=/403
=username:password
本文地址:https://www.badfl.com/article/af700072fc17b5dfdb0a.html