Spring Boot整合SA-Token的使用详解
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.config.SaTokenConfig;
import cn.dev33.satoken.stp.StpInterface;
import cn.dev33.satoken.filter.SaServletFilter;
@Configuration
@PropertySource("classpath:/sa-token.properties")
public class SaTokenConfigure implements WebMvcConfigurer {
@Value("${sa-token.token-name}")
private String tokenName;
@Value("${sa-token.timeout}")
private long timeout;
// 注册Sa-Token的全局配置
@Bean
public SaTokenConfig getSaTokenConfig(Environment environment) {
return new SaTokenConfig()
.setTokenName(tokenName) // token名称
.setTimeout(timeout) // 超时时间
.setActivityTimeout(-1); // 活跃认证时间为-1,即永不过期
}
// 注册Sa-Token的会话管理Bean
@Bean
public StpInterface getStpInterface() {
return new StpInterface() {
// 返回一个用户的唯一标识,调用时机:用户登录
@Override
public Object getLoginId(Object user) {
// 这里的user是登录时传入的用户对象,可以通过它获取user的id
return user.getId();
}
// 返回token的生效状态,调用时机:每次请求
@Override
public boolean isValid(String token) {
// 根据实际情况实现token的生效校验
return true;
}
};
}
// 注册Sa-Token的Servlet过滤器
@Bean
public SaServletFilter getSaServletFilter() {
return new SaServletFilter();
}
// 注册Sa-Token的SpringBean加载完成事件
@Bean
public SaManager getSaManager() {
return SaManager.getSaTokenManager();
}
}
这段代码展示了如何在Spring Boot项目中配置和注册SA-Token的核心组件,包括全局配置、会话管理接口和Servlet过滤器。通过@Configuration
注解,这个类被标记为配置类,并在启动时自动被Spring框架扫描和加载。@PropertySource
注解用于指定外部配置文件的位置,可以将SA-Token的配置参数外部化管理。通过@Value
注解,我们可以将配置文件中的值注入到配置类的字段中,并在getSaTokenConfig
方法中使用这些字段来配置SA-Token。getStpInterface
方法提供了一个自定义的会话管理接口实现,用于定义如何获取用户唯一标识和验证token的有效性。最后,getSaServletFilter
方法注册了SA-Token提供的Servlet过滤器,以便拦截每个HTTP请求并应用SA-Token的认证过滤逻辑。
评论已关闭