mirror of
https://gitee.com/lab1024/smart-admin.git
synced 2025-11-12 21:53:48 +08:00
sa-token
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
package net.lab1024.sa.admin.config;
|
||||
|
||||
import cn.dev33.satoken.interceptor.SaInterceptor;
|
||||
import cn.dev33.satoken.router.SaRouter;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import net.lab1024.sa.common.config.UrlConfig;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.DependsOn;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
|
||||
|
||||
/**
|
||||
* sa-token 配置
|
||||
*
|
||||
* @author Turbolisten
|
||||
* @date 2023/7/13 16:57
|
||||
*/
|
||||
@Configuration
|
||||
public class SaTokenConfig implements WebMvcConfigurer {
|
||||
|
||||
/**
|
||||
* 注册 Sa-Token 拦截器,定义详细认证规则
|
||||
*
|
||||
* @param registry
|
||||
*/
|
||||
@Override
|
||||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
SaInterceptor interceptor = new SaInterceptor(handler -> {
|
||||
|
||||
// 每个路由 都做为一个权限点
|
||||
UrlConfig.URL_LIST.forEach(url -> SaRouter.match(url, r -> StpUtil.checkPermission(url)));
|
||||
|
||||
});
|
||||
// 关闭注解鉴权 只做路由拦截校验
|
||||
interceptor.isAnnotation(false);
|
||||
registry.addInterceptor(interceptor).addPathPatterns("/**");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -2,17 +2,17 @@ package net.lab1024.sa.admin.interceptor;
|
||||
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import cn.hutool.core.convert.NumberWithFormat;
|
||||
import com.google.common.collect.Lists;
|
||||
import net.lab1024.sa.common.common.domain.RequestUser;
|
||||
import net.lab1024.sa.common.common.enumeration.UserTypeEnum;
|
||||
import net.lab1024.sa.common.common.interceptor.AbstractInterceptor;
|
||||
import net.lab1024.sa.common.common.util.SmartEnumUtil;
|
||||
import net.lab1024.sa.common.handler.GlobalExceptionHandler;
|
||||
import net.lab1024.sa.common.module.support.token.TokenService;
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* admin 拦截器
|
||||
@@ -24,30 +24,22 @@ import javax.servlet.http.HttpServletResponse;
|
||||
public class AdminInterceptor extends AbstractInterceptor {
|
||||
|
||||
/**
|
||||
* 开发环境 方便调试 默认 user id 1
|
||||
* 可以根据id 查询实际用户数据
|
||||
* 配置拦截路径
|
||||
*
|
||||
* @param token
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public RequestUser getDevRequestUser(String token) {
|
||||
long userId = NumberUtils.toLong(token, 1L);
|
||||
RequestUser requestUser = new RequestUser();
|
||||
requestUser.setUserId(userId);
|
||||
requestUser.setUserName("dev");
|
||||
requestUser.setUserType(UserTypeEnum.ADMIN_EMPLOYEE);
|
||||
return requestUser;
|
||||
public List<String> pathPatterns() {
|
||||
return Lists.newArrayList("/**");
|
||||
}
|
||||
|
||||
@Override
|
||||
public RequestUser checkTokenAndGetUser() {
|
||||
/**
|
||||
* 检验当前会话是否已经登录, 如果未登录,则抛出异常:`NotLoginException`
|
||||
* 已在全局异常处理
|
||||
* @see GlobalExceptionHandler#handlerNotLoginException
|
||||
*/
|
||||
public void checkSaToken() {
|
||||
StpUtil.checkLogin();
|
||||
}
|
||||
|
||||
@Override
|
||||
public RequestUser getRequestUser() {
|
||||
// 获取额外数据
|
||||
Integer userType = ((NumberWithFormat) StpUtil.getExtra(TokenService.EXTRA_KEY_USER_TYPE)).intValue();
|
||||
UserTypeEnum userTypeEnum = SmartEnumUtil.getEnumByValue(userType, UserTypeEnum.class);
|
||||
@@ -62,25 +54,13 @@ public class AdminInterceptor extends AbstractInterceptor {
|
||||
return requestUser;
|
||||
}
|
||||
|
||||
/**
|
||||
* 配置拦截路径
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public String[] pathPatterns() {
|
||||
return new String[]{"/**"};
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||
boolean isHandle = super.preHandle(request, response, handler);
|
||||
if (!isHandle) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// TODO listen 校验权限
|
||||
|
||||
// 如有业务需处理 写在此处
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package net.lab1024.sa.admin.module.system.login.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import cn.hutool.extra.servlet.ServletUtil;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@@ -12,6 +13,7 @@ import net.lab1024.sa.common.common.constant.RequestHeaderConst;
|
||||
import net.lab1024.sa.common.common.domain.ResponseDTO;
|
||||
import net.lab1024.sa.common.common.util.SmartRequestUtil;
|
||||
import net.lab1024.sa.common.module.support.captcha.domain.CaptchaVO;
|
||||
import org.checkerframework.checker.units.qual.N;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
@@ -85,4 +87,11 @@ public class LoginController {
|
||||
return loginService.getCaptcha();
|
||||
}
|
||||
|
||||
// TODO listen
|
||||
@NoNeedLogin
|
||||
@ApiOperation("测试权限 @listen")
|
||||
@GetMapping("/listen/test")
|
||||
public ResponseDTO<String> test() {
|
||||
return ResponseDTO.ok();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user