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首评加载速度及白屏时间优化详解

    Vue首评加载速度及白屏时间优化详解 前言 在当今互联网时代,网页的首评加载速度和白屏时间已经成为了评判网站质量和用户体验的重要指标之一。Vue作为一门专为构建交互式Web界面而设计的渐进式JavaScript框架,在进行项目开发时也需要考虑如何优化首评加载速度和白屏时间。本文旨在帮助Vue开发者做到此项优化。 背景 在进行Vue项目开发时,由于文档、组件和…

    Vue 2023年5月28日
    00
  • 15分钟上手vue3.0(小结)

    15分钟上手vue3.0(小结) 介绍 Vue.js 3.0 是一个轻量级的框架,易于学习和使用。它具有高效、灵活、高度可定制性等优点,而且我们可以通过官方文档、社区论坛等方式快速掌握其使用方法。 本文将带领大家了解并上手 Vue.js 3.0。 安装 Vue.js 3.0 在开始使用 Vue.js 3.0 之前,我们需要先安装它。我们可以通过以下方式进行安…

    Vue 2023年5月28日
    00
  • vue中使用Echarts map图实现下钻至县级的思路详解

    实现 Echarts 中的地图下钻操作,需要遵循以下三个步骤: 绘制初始地图,该地图只包含省级别数据,添加 click 事件监听。 在 click 事件处理函数中,获取当前点击区域的信息以及该区域对应的下一级地图数据。 根据下一级地图数据,重新绘制地图,并添加 click 事件监听。 下面我们通过两个示例以及详细的代码讲解来具体说明这三个步骤。 示例一:绘制…

    Vue 2023年5月28日
    00
  • Vue.js 无限滚动列表性能优化方案

    下面我将详细讲解“Vue.js 无限滚动列表性能优化方案”的完整攻略。 什么是无限滚动列表? 无限滚动列表是一种优化页面性能和用户体验的技术,它允许我们加载更多的数据以填充页面,而不会一次性加载所有数据。当用户滚动到页面底部时,它会自动加载更多数据,实现页面的无限滚动效果。 Vue.js 实现无限滚动列表的基本原理 在 Vue.js 中,我们可以通过监听滚动…

    Vue 2023年5月28日
    00
  • vue2.0使用Sortable.js实现的拖拽功能示例

    实现拖拽功能是现代Web应用中常见的需求之一,而Vue.js是目前最受欢迎的JavaScript框架之一。在Vue.js中,我们可以使用第三方库Sortable.js来完成拖拽功能的实现。 下面是实现“vue2.0使用Sortable.js实现的拖拽功能示例”的攻略: 准备工作 使用Vue CLI创建一个新的Vue.js项目。 bash vue create…

    Vue 2023年5月29日
    00
  • 关于vue-property-decorator的基础使用实践

    下面我将详细讲解“关于vue-property-decorator的基础使用实践”的完整攻略,以及两条示例说明。 什么是vue-property-decorator vue-property-decorator 是 Vue.js TypeScript 类组件的实用装饰器,它提供了一些诸如 @Prop、@Component 等装饰器,简化了我们对 Vue 组件…

    Vue 2023年5月27日
    00
  • nodejs(officegen)+vue(axios)在客户端导出word文档的方法

    下面是详细讲解“nodejs(officegen)+vue(axios)在客户端导出word文档的方法”的完整攻略: 一、安装依赖 首先需要安装nodejs的officegen模块以及vue的axios模块。在安装完nodejs之后,可以使用以下命令进行安装: npm install –save officegen axios 二、创建服务端代码 创建一个…

    Vue 2023年5月27日
    00
  • Vue2.0子同级组件之间数据交互方法

    当我们在Vue2.0中开发应用时,会遇到子组件之间需要传递数据的情况,这时候我们可以使用父子组件传参、eventBus、vuex、$attrs和$emit等方法来实现子组件之间的数据交互。 父子组件传参 父子组件之间传参是Vue2.0提供的最基本的数据交互方式,其核心思想是通过props属性将父组件的数据传递到子组件中,子组件通过props接收这些数据,从而…

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