Satoken+Redis实现短信登录、注册、鉴权_sa-token redis

登录

用户输入手机号,调用登录接口,根据手机号查询是否存在该用户

@PostMapping("/login")
public Boolean login(@RequestBody String phone) {
  //从数据库查询该手机号的用户
  User user = userInfoDao.selectUser(phone);
  //若不存在该用户返回false,存在返回true
  return user == null ? false : true;
}

确认用户存在后就可以调用发送验证码接口,再校验验证码是否正确

/**
 * 发送验证码:
 * 在redis中用hash存储用户的相关信息,用PHONE_NUM+手机号作为用户hash的key,
 * “code”作为用户信息hash中验证码的小key,查询redis中用户的验证码信息,
 * "num"是验证次数的小key
 */
@PostMapping("/sendCaptcha")
public String sendCaptcha(String phone){
    //验证码verCode
    String verCode;
    String key = "PHONE_NUM"+phone;
    //如果redis中有缓存的验证码
    Object object = redisTemplate.opsForHash().get(key, "code");
    if(null != object){
        throw Error("该用户验证码已发送,且未过期,请输入验证码登录或注册!");
    }else {
        Random r = new Random(System.currentTimeMillis());
        int low = 100000;
        int high = 999999;
        //根据时间随机生成验证码verCode,将其放入redis中
        int code = (r.nextInt(high - low) + low);
        verCode = String.valueOf(code);
        redisTemplate.opsForHash().put(key,"code",verCode);
        //放入检验次数num=5
        redisTemplate.opsForHash().put(key,"num",5);
        //设置过期时间
实现 gateway 统一sa - token 注解联合使用时,可按以下步骤进行: ### 1. 配置 Gateway 首先需要对 Gateway 进行相关配置,包括服务端口、Redis 连接信息、Nacos 服务地址、路由规则以及 sa - token 的相关参数等。示例配置如下: ```yaml server: port: 8080 spring: application: name: sc-gateway data: redis: host: localhost port: 6379 cloud: nacos: server-addr: localhost:8848 gateway: routes: - id: sc-system uri: lb://sc-system predicates: - Path=/system/** - id: sc-auth uri: lb://sc-auth predicates: - Path=/auth/** sa-token: token-name: token timeout: 2592000 activity-timeout: -1 allow-concurrent-login: false is-share: false token-style: uuid ``` 这样的配置可以让 Gateway 能够正确路由请求,并对 sa - token 进行管理,为后续的操作提供基础环境 [^2]。 ### 2. 注册 Sa - Token 的全局过滤器 新建 `SaTokenConfigure.java` 文件,注册 Sa - Token 的全局过滤器,用于对请求进行统一的处理。示例代码如下: ```java import cn.dev33.satoken.reactor.filter.SaReactorFilter; import cn.dev33.satoken.router.SaRouter; import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.util.SaResult; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class SaTokenConfigure { @Bean public SaReactorFilter getSaReactorFilter() { return new SaReactorFilter() .addInclude("/**") .addExclude("/favicon.ico") .setAuth(obj -> { System.out.println("----------sa全局认证"); // 可以在这里添加一些全局的逻辑 SaRouter.match("/test/test", () -> StpUtil.checkLogin()); }) .setError(e -> { System.out.println("----------sa全局异常"); return SaResult.error(e.getMessage()); }); } } ``` 通过这个全局过滤器,可以对所有请求进行初步的,对于匹配特定规则的请求进行登录检查等操作。在这个过程中,可以结合实际业务需求,添加更多的全局逻辑 [^3]。 ### 3. 使用 sa - token 注解进行细粒度 在具体的业务方法上使用 sa - token 提供的注解,进行细粒度的控制。例如: ```java import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckPermission; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { @GetMapping("/test/needLogin") @SaCheckLogin public String needLogin() { return "此接口需要登录才能访问"; } @GetMapping("/test/needPermission") @SaCheckPermission("user:add") public String needPermission() { return "此接口需要 user:add 限才能访问"; } } ``` 这里使用了 `@SaCheckLogin` 注解来确保访问该接口的用户已经登录,使用 `@SaCheckPermission` 注解来确保用户拥有指定的限。通过这种方式,可以在全局的基础上,对不同的业务接口进行更细致的限控制 [^1]。 ### 4. 启动 Gateway 项目 创建 Gateway 项目的启动类,并添加必要的注解和配置。示例代码如下: ```java import com.jinyi.up.feignclient.UserProvideFeignClient; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients; @SpringBootApplication(exclude = DataSourceAutoConfiguration.class) @EnableDiscoveryClient @EnableFeignClients(basePackageClasses = {UserProvideFeignClient.class}) public class JinyiGateWayApplication { public static void main(String[] args) { SpringApplication.run(JinyiGateWayApplication.class, args); } } ``` 确保项目能够正确启动,并能够通过 Gateway 对请求进行路由和处理 [^4]。 ### 总结 通过以上步骤,先在 Gateway 配置文件中进行基础设置,再注册全局过滤器进行统一,然后在业务方法上使用 sa - token 注解进行细粒度,最后启动 Gateway 项目,就可以实现 gateway 统一sa - token 注解的联合使用,为系统提供全面且细致的限控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值