Sa-token基本使用教程(全网最详细!!!)_sa-token

Sa-token基本使用教程(全网最详细!!!)_sa-token_02

Sa-token基本使用教程(全网最详细!!!)_sa-token_03

Sa-token基本使用教程(全网最详细!!!)_sa-token_04

Sa-token基本使用教程(全网最详细!!!)_sa-token_05

Sa-token基本使用教程(全网最详细!!!)_sa-token_06

Sa-token基本使用教程(全网最详细!!!)_sa-token_07

Sa-token基本使用教程(全网最详细!!!)_sa-token_08

Sa-token基本使用教程(全网最详细!!!)_sa-token_09

Sa-token基本使用教程(全网最详细!!!)_sa-token_10

Sa-token基本使用教程(全网最详细!!!)_sa-token_11

Sa-token基本使用教程(全网最详细!!!)_sa-token_12

Sa-token基本使用教程(全网最详细!!!)_sa-token_13

Sa-token基本使用教程(全网最详细!!!)_sa-token_14

Sa-token基本使用教程(全网最详细!!!)_sa-token_15

Sa-token基本使用教程(全网最详细!!!)_sa-token_16

Sa-token基本使用教程(全网最详细!!!)_sa-token_17

Sa-token基本使用教程(全网最详细!!!)_sa-token_18

Sa-token基本使用教程(全网最详细!!!)_sa-token_19


// 登录认证:只有登录之后才能进入该方法 
@SaCheckLogin                        
@RequestMapping("info")
public String info() {
    return "查询用户信息";
}
 
// 角色认证:必须具有指定角色才能进入该方法 
@SaCheckRole("super-admin")        
@RequestMapping("add")
public String add() {
    return "用户增加";
}
 
// 权限认证:必须具有指定权限才能进入该方法 
@SaCheckPermission("user-add")        
@RequestMapping("add")
public String add() {
    return "用户增加";
}
 
// 二级认证:必须二级认证之后才能进入该方法 
@SaCheckSafe()        
@RequestMapping("add")
public String add() {
    return "用户增加";
}
 
// Http Basic 认证:只有通过 Basic 认证后才能进入该方法 
@SaCheckBasic(account = "sa:123456")
@RequestMapping("add")
public String add() {
    return "用户增加";
}

Sa-token基本使用教程(全网最详细!!!)_sa-token_20


package com.xc.satoken.controller;
 
import cn.dev33.satoken.annotation.*;
import cn.dev33.satoken.stp.StpUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RequestMapping("/user")
@RestController
public class UserController {
    @PostMapping("/login")
    public String login(String username,String password){
        //模拟登录校验
        if("xx".equals(username) && "123456".equals(password)){
            StpUtil.login(1001);
            return "登陆成功";
        }
        return "登陆失败";
    }
 
    @GetMapping("/isLogin")
    public String islogin(){
        return "当前会话是否登录:" + StpUtil.isLogin();
    }
 
 
    @GetMapping("/checkLogin")
    public String checkLogin(){
        StpUtil.checkLogin();
        return "已登录";
    }
 
    @GetMapping("/hasPerm")
    public String hasPermission(){
        StpUtil.checkPermission("user:select");
            return "true";
//        else return "false";
 
    }
 
    @GetMapping("/checkPermAnd")
    public String hasPermissionAnd(){
        StpUtil.checkPermissionAnd("user:select","user:delete");
        return "true";
    }
 
    @GetMapping("/hasPermOr")
    public String hasPermissionOr(){
        if (StpUtil.hasPermissionOr("user:select","user:delete"))
            return "true";
        else return "false";
    }
 
    @GetMapping("/hasRole")
    public String hasRole(){
        StpUtil.checkRole("user");
        return "true";
 
    }
 
    @GetMapping("/checkRoleAnd")
    public String hasRoleAnd(){
        StpUtil.checkRoleAnd("user","admin");
        return "true";
    }
 
    @GetMapping("/hasRoleOr")
    public String hasRoleOr(){
        if (StpUtil.hasRoleOr("user2","admin"))
            return "true";
        else return "false";
    }
 
    @GetMapping("/logout")
    public String logout(){
        StpUtil.logout(1001);
        return "success";
    }
 
    @GetMapping("/kickout")
    public String kickout(){
        StpUtil.kickout(1001);
        return "success";
    }
 
    @GetMapping("/disable")
    public String disable(){
        StpUtil.disable(1001, 86400);
        return "success";
 
    }
 
    // 登录认证:只有登录之后才能进入该方法
    @SaCheckLogin
    @RequestMapping("info")
    public String info() {
        return "查询用户信息";
    }
 
    // 角色认证:必须具有指定角色才能进入该方法
    @SaCheckRole("admin")
    @RequestMapping("add1")
    public String add1() {
        return "用户增加";
    }
 
    // 权限认证:必须具有指定权限才能进入该方法
    @SaCheckPermission("user:add")
    @RequestMapping("add")
    public String add() {
        return "用户增加";
    }
 
    // 二级认证:必须二级认证之后才能进入该方法
    @SaCheckSafe()
    @RequestMapping("add2")
    public String add2() {
        return "用户增加";
    }
 
    // Http Basic 认证:只有通过 Basic 认证后才能进入该方法
    @SaCheckBasic(account = "xx:123456")
    @RequestMapping("add3")
    public String add3() {
        return "用户增加";
    }
 
    // 注解式鉴权:只要具有其中一个权限即可通过校验
    @RequestMapping("atJurOr")
    @SaCheckPermission(value = {"user:add", "user:all", "user:delete"}, mode = SaMode.OR)
    public String atJurOr() {
        return "用户信息";
    }
 
    // 注解式鉴权:只要具有其中一个权限即可通过校验
    @RequestMapping("userAdd")
    @SaCheckPermission(value = "user:add", orRole = "admin")
    public String userAdd() {
        return "用户信息";
    }
 
 
}

异常处理

package com.xc.satoken.config;
 
import cn.dev33.satoken.exception.DisableLoginException;
import cn.dev33.satoken.exception.NotLoginException;
 
 
import cn.dev33.satoken.exception.NotPermissionException;
import cn.dev33.satoken.exception.NotRoleException;
import cn.hutool.json.JSONObject;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
@RestControllerAdvice
public class MyExceptionHandle {
    // 全局异常拦截(拦截项目中的NotLoginException异常)
    @ResponseBody
    @ExceptionHandler(Exception.class)
    public String handlerException(Exception e, HttpServletRequest request, HttpServletResponse response)
            throws Exception {
 
 
            // 打印堆栈,以供调试
            System.out.println("全局异常---------------");
            e.printStackTrace();
 
            // 不同异常返回不同状态码
            String aj = null;
            if (e instanceof NotLoginException) {	// 如果是未登录异常
                NotLoginException ee = (NotLoginException) e;
                aj = ee.getMessage();
            }
            else if(e instanceof NotRoleException) {		// 如果是角色异常
                NotRoleException ee = (NotRoleException) e;
                aj = ("无此角色:" + ee.getRole());
            }
            else if(e instanceof NotPermissionException) {	// 如果是权限异常
                NotPermissionException ee = (NotPermissionException) e;
                aj = ("无此权限:" + ee.getCode());
            }
            else if(e instanceof DisableLoginException) {	// 如果是被封禁异常
                DisableLoginException ee = (DisableLoginException) e;
                aj = ("账号被封禁:" + ee.getDisableTime() + "秒后解封");
            }
            else {	// 普通异常, 输出:500 + 异常信息
                aj = (e.getMessage());
            }
 
            // 返回给前端
            return aj;
    }
 
}

Sa-token基本使用教程(全网最详细!!!)_sa-token_21

Sa-token基本使用教程(全网最详细!!!)_sa-token_22

Sa-token基本使用教程(全网最详细!!!)_sa-token_23

Sa-token基本使用教程(全网最详细!!!)_sa-token_24

Sa-token基本使用教程(全网最详细!!!)_sa-token_25

Sa-token基本使用教程(全网最详细!!!)_sa-token_26

注解相关


<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>测试注解鉴权</title>
</head>
<body>
 
<form action="/user/login" method="post">
    用户名:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    <input type="submit" name="登录">
</form>
<br>
 
<a href="/user/info">登录看查看</a>
<br>
 
<a href="/user/add1" >admin可看</a>
<br>
 
<a href="/user/add" >有user:add可看</a>
<br>
 
<a href="/user/atJurOr" >有"user:add", "user:all", "user:delete"其中之一可看</a>
<br>
 
<a href="/user/userAdd" >有user:add或是admin可看</a>
<br>
 
<a href="/user/add2" >必须二级认证之后才能进入该方法 </a>
<br>
 
<a href="/user/add3" >只有通过 Basic 认证后才能进入该方法</a>
</body>
 
</html>