下面给出SpringBoot使用Sa-Token实现权限认证的完整攻略,包括以下步骤:
1. 引入Sa-Token
在pom.xml
文件中添加如下依赖:
<dependency>
<groupId>cn.dev33.satoken</groupId>
<artifactId>sa-token-all</artifactId>
<version>x.x.x</version>
</dependency>
建议使用最新版本的Sa-Token。
2. 开启注解式鉴权
在SpringBoot的启动类上添加注解@SaEnableWeb
,启用Sa-Token的注解式鉴权功能。
@SpringBootApplication
@SaEnableWeb
public class Application {
// ...
}
3. 配置登录状态验证
在Spring的配置文件application.yml
中,添加如下配置:
sa-token:
# 开启登录验证拦截器
http-auth-token-enable: true
其他可用的配置选项请参考Sa-Token的文档。
4. 编写登录逻辑
使用SaTokenManager.login()
或者SaTokenManager.getSession()
方法,实现登录逻辑。示例如下:
@RestController
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/login")
public String login(@RequestParam String username, @RequestParam String password) {
User user = userService.getUserByUsernameAndPassword(username, password); // 查询用户
if (user != null) {
// 登录成功,创建token
SaTokenManager.login(user.getId().toString());
return "Login success";
} else {
return "Login failed";
}
}
}
5. 配置权限验证规则
在application.yml
中添加如下配置:
sa-token:
# 配置权限规则
rules:
# 所有请求都要登录
/**: anon
# 管理员才能访问/user/admin
/user/admin/**: auth('admin')
上面的配置表示,所有请求都要求登录,但是请求/user/admin/**
路径下的接口,只有以admin
身份登录才能访问。
6. 使用注解进行鉴权
在需要进行鉴权的Controller方法上,添加@SaCheckPermission
注解即可。示例如下:
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/admin")
@SaCheckPermission("admin") // 添加鉴权注解
public String admin() {
return "Admin page";
}
}
上述代码表示/user/admin
路径下的接口,只有以admin
身份登录才能访问。
7. 示例1:拦截器中使用Sa-Token
假设我们需要在每个请求进来的时候,对登录状态进行校验,可以在拦截器中使用Sa-Token进行拦截。示例如下:
@Component
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {
// 判断是否登录,如果没有登录返回401未授权
if (!StpUtil.isLogin()) {
response.setStatus(HttpStatus.UNAUTHORIZED.value());
return false;
}
return true;
}
}
在拦截器中,我们使用StpUtil.isLogin()
判断是否已经登录,如果没有登录,返回401未授权。
8. 示例2:使用注解进行操作权限验证
假设我们需要在某个接口中,判断用户的操作权限,可以使用@SaCheckPermission
注解,配合@SaCheckOperate
注解使用。示例如下:
@RestController
@RequestMapping("/article")
public class ArticleController {
@Autowired
private ArticleService articleService;
@PostMapping("/delete/{id}")
@SaCheckPermission("admin") // 判断访问权限
@SaCheckOperate("article:delete:{id}") // 判断操作权限
public String delete(@PathVariable("id") Long articleId) {
articleService.delete(articleId);
return "Delete success";
}
}
上述代码表示,删除文章的接口需要admin
权限才能访问,同时还需要判断操作权限。操作权限的具体判断规则,可以在业务逻辑中自己实现。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot使用Sa-Token实现权限认证 - Python技术站