SpringBoot使用Sa-Token实现权限认证

下面给出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技术站

(2)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue预览 pdf、word、xls、ppt、txt文件的实现方法

    实现网页预览PDF、Word、Excel、PPT、TXT等各种文件格式,一般需要使用第三方库进行实现。本文将介绍如何使用Vue和依赖库来预览这些文件格式。 1. 安装vue2-pdf预览库 Vue2-pdf 是一个基于 Vue 2.0 开发的 PDF 预览组件,支持PDF的浏览、缩放、翻页和导出等操作。具体实现步骤: 安装依赖 npm install vue…

    Vue 2023年5月28日
    00
  • Project Reactor 响应式范式编程

    Project Reactor 响应式范式编程 简介 Project Reactor是一款响应式范式编程框架,用于构建基于流(stream)概念的异步、非阻塞、事件驱动的应用程序。它基于Reactive Streams标准,并提供了一系列工具类和API,能够轻松地创建、组合和执行异步流处理操作。在使用Project Reactor编程时,开发人员通过声明式方…

    Vue 2023年5月28日
    00
  • webpack4+Vue搭建自己的Vue-cli项目过程分享

    下面我就来详细讲解“webpack4+Vue搭建自己的Vue-cli项目过程分享”的完整攻略。 1. 创建Vue项目 使用Vue-cli可快速搭建Vue项目结构。首先,我们需要全局安装Vue-cli: npm install -g vue-cli 然后,运行以下命令来创建Vue项目: vue init webpack my-project cd my-pro…

    Vue 2023年5月27日
    00
  • vue中使用file-saver导出文件的全过程记录

    下面我将为您详细讲解在Vue中使用file-saver导出文件的全过程记录。 1. 安装file-saver 首先需要安装file-saver依赖库,可以使用npm进行安装: npm install file-saver –save-dev 2. 创建可导出的文件 创建一个用于导出的文件,例如 exportFile.js。在该文件中使用file-saver…

    Vue 2023年5月27日
    00
  • vue eslint简要配置教程详解

    介绍: Vue代码的质量保证是很有必要的,eslint就是很好的工具之一。在Vue项目中,如何配置eslint呢?下面提供一份简要配置教程。 正文: 安装依赖 要在Vue项目中使用eslint,需要安装对应的依赖: npm install eslint eslint-loader eslint-plugin-vue -D 这里需要注意,eslint是esli…

    Vue 2023年5月28日
    00
  • vue项目打包后,由于html被缓存导致出现白屏的处理方案

    当 Vue 项目部署到线上服务器时,我们可能会遇到“白屏”问题,此现象通常是由于浏览器缓存的 HTML 文件。为了解决这种问题,我们可以尝试以下几种处理方案: 1. 在 index.html 中设置 meta 标签 在 index.html 文件的 head 标签里添加如下代码,告诉浏览器不要缓存: <meta http-equiv="Pra…

    Vue 2023年5月28日
    00
  • Vue过滤器filters的用法及时间戳转换问题

    让我来详细讲解一下“Vue过滤器filters的用法及时间戳转换问题”的完整攻略。 什么是Vue过滤器filters? Vue过滤器filters是一种在模板中使用的文本格式化工具,用于将数据转换成所需的格式,比如将文本全部转换为大写、将数字按照指定的小数位数四舍五入等等。Vue过滤器通常被放在Mustache插值的后面,由管道符号(|)连接,如下: {{ …

    Vue 2023年5月28日
    00
  • Vue深入理解之v-for中key的真正作用

    首先我们需要了解v-for指令的使用方法。在Vue.js中,通过v-for指令可以很方便地渲染列表数据。使用v-for指令时,一定要加上唯一的key属性,这个属性的作用在于帮助Vue.js区分每个元素,从而提升渲染的性能和效率。 那么,key属性到底有什么作用呢?的确有很多人误解了key属性的作用,认为只是为了区分每个元素,但其实key属性还有很多其他的功能…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部