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

yizhihongxing

下面给出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 props传Array/Object类型值,子组件报错的情况

    解决 Vue props 传 Array/Object 类型值,子组件报错的情况,可以通过以下几种方式来实现,具体步骤如下: 使用具体类型声明 Props 在声明组件的 props 时,可以使用具体类型来声明,例如: props: { data: Array // 声明 Array 类型的 data Prop } 这样可以确保子组件在接收到 props 时,…

    Vue 2023年5月29日
    00
  • Vue.use()的用法和install的用法解析

    下面详细讲解“Vue.use()的用法和install的用法解析”。 Vue.use()的用法 Vue.use(plugin: Object | Function)是Vue.js提供的一个全局API,它用于安装Vue.js插件。我们在开发中经常使用到第三方插件(如Vuex,VueRouter等),这些插件需要先安装,才能在Vue实例中使用。相应的,Vue.j…

    Vue 2023年5月28日
    00
  • Vue 组件渲染详情

    Vue 组件渲染详情是指在 Vue 应用中,如何使用组件进行渲染及其相关的细节。下面将从 Vue 组件的定义、组件间通信、组件生命周期、组件的复用以及常见问题五个方面,来详细讲解 Vue 组件渲染的攻略。 Vue 组件的定义 Vue 组件分为两种:全局组件和局部组件,其定义方式分别如下: 全局组件 全局组件可以在任何 Vue 实例的模板中使用,定义方式如下:…

    Vue 2023年5月28日
    00
  • 教你给《羊了个羊》配置一套智能客服系统

    教你给《羊了个羊》配置一套智能客服系统 智能客服系统在现代优秀网站中越来越受到重视。这里我们将教你如何为网站《羊了个羊》配备智能客服系统。 步骤一:选择平台 选择一个理想的智能客服平台是第一步。目前市场上的智能客服软件有很多,包括DialogFlow,Tars,BotStar等。在这里我们以DialogFlow为例。 步骤二:创建DialogFlow项目 登…

    Vue 2023年5月28日
    00
  • 如何解决ElementPlus的el-table底白线问题

    解决Element Plus的el-table底白线问题可以通过修改CSS样式来完成。步骤如下: 第一步:查看el-table的底部样式 通过浏览器的开发者工具,可以查看到el-table的底部样式,它的CSS类名是.el-table__body-wrapper::after。默认情况下,该样式设置了一个底部白线,并且高度为1像素,颜色为#e4e7ed。 第…

    Vue 2023年5月28日
    00
  • Ant Design Vue日期组件的时间限制方式

    Ant Design Vue 是 Ant Design 在 Vue 中的实现,是一套基于 Vue 实现的高质量 UI 组件库,拥有丰富的组件和良好的设计风格,深受前端工程师的喜爱。 Ant Design Vue 提供了日期组件,我们可以通过设置时间限制方式来限定用户选择日期的范围,例如限制用户只能选择今天及今天之后的日期,或者只能选择本月份的日期等等。 下面…

    Vue 2023年5月29日
    00
  • Vue如何引入远程JS文件

    Vue框架提供了多种方式来引入远程的JavaScript文件。下面详细介绍两种常用的方式。 方式一:通过script标签引入 我们可以在Vue组件内使用script标签来引用远程JS文件。下面是一个示例: <template> <div> <h1>Hello Vue</h1> <button @click…

    Vue 2023年5月28日
    00
  • 简单学习5种处理Vue.js异常的方法

    下面我将详细讲解“简单学习5种处理Vue.js异常的方法”的完整攻略。 异常处理 在Vue.js应用中,异常处理是一个必不可少的部分。因为在应用的运行过程中,难免会出现一些错误或者异常情况,需要进行合理的处理。 常见的异常 TypeError:类型不匹配,通常发生在访问null或undefined值或者使用对象上不存在的方法或属性时。 ReferenceEr…

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