sa-token的前后端分离中的简单使用
sa-token的前后端分离中的简单使用
sa-token: 一个轻量级 java 权限认证框架,让鉴权变得简单、优雅!极大程度上减少鉴权相关代码的编写,实现注入即用的效果。
官方文档 :https://sa-token.cc/
详细配置及其学习请在官方文档学习。
-
引入相关依赖
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot3-starter</artifactId>
<version>1.34.0</version>
</dependency>
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-jwt</artifactId>
<version>1.34.0</version>
</dependency>
本次引入的为springboot3中的使用,必须满足jdk>=17,springboot2以及jdk17以下的版本请根据官网中的相关说明进行配置
-
相关参数配置
在
application.yml
文件中增加如下配置sa-token: tokenName: Authorization tokenPrefix: Bearer timeout: 86400 activityTimeout: -1 isConcurrent: true isShare: true tokenStyle: random-128 isLog: false jwt-secret-key: zxcvbnmasdfghjklqwertyuiop
具体参数参考如下文档
-
登录接口处理
public R login(LoginVO loginVO) {
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getUserName,loginVO.getUserName());
queryWrapper.eq(User::getPassword,loginVO.getPassword());
User user = userService.getOne(queryWrapper);
if (Objects.nonNull(user)){
StpUtil.login(user.getId(),
SaLoginConfig.setExtra("userId",user.getId())
.setExtra("userName",user.getUserName())
.setExtra("realName",user.getRealName())
);
SaTokenInfo tokenInfo = StpUtil.getTokenInfo();
Map<String,Object> result = new HashMap<>();
result.put(CommonConstant.TOKEN_KEY,tokenInfo.getTokenValue());
return R.data(result,"登录成功");
}
return R.fail(ResultCodeEnum.ACCOUNT_OR_PASSWORD_INCORRECT);
}
-
拦截过滤配置
@Configuration
public class SaTokenConfig implements WebMvcConfigurer {
String[] writeUrl = new String[]{
"/auth/login",
"/doc.html",
"/v3/api-docs/**",
"/webjars/js/**",
"/webjars/css/**",
"/favicon.ico"
};
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new SaInterceptor(handler -> StpUtil.checkLogin()))
.addPathPatterns("/**")
.excludePathPatterns(writeUrl);
}
}
jwt生成规则配置
@Configuration
public class SaTokenJwtConfig {
@Bean
public StpLogic getStpLogicJwt() {
return new StpLogicJwtForStateless();
}
}
配置完成,接下来就可以通过postman等工具进行测试了!!!