拦截违规调用,适配RBAC权限模型,不同角色不同授权,权限分配精细到按钮级
专业的数据缓存中心,内置三种会话模型:User-Session、Token-Session、自定义Session
一行代码实现踢人下线功能,清退违规用户,对方再次访问系统提示“已被踢下线”
封禁指定账号,并设定解封时间,期间此账号无法登录系统
+可扩展持久层,集成Redis、Memcached等专业缓存中间件,重启数据不丢失
@@ -139,16 +143,16 @@一个参数即可轻松适配 [记住我] 模式,做到重启浏览器免验证
+轻松适配 [记住我] 模式,重启浏览器免验证,还可指定免验证具体时长
提供密码加密模块,可快速MD5、SHA1、SHA256、AES、RSA加密
注: v1.7版本以上已不再需要此注解,直接引入sa-token-spring-boot-starter依赖即可 + *
请直接忽略此注解 * @author kong * */ diff --git a/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/autowired/SaTokenSpringAutowired.java b/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/autowired/SaTokenSpringAutowired.java index 67cf9740..af9396b6 100644 --- a/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/autowired/SaTokenSpringAutowired.java +++ b/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/autowired/SaTokenSpringAutowired.java @@ -9,10 +9,9 @@ import org.springframework.util.PathMatcher; import cn.dev33.satoken.SaTokenManager; import cn.dev33.satoken.action.SaTokenAction; import cn.dev33.satoken.config.SaTokenConfig; -import cn.dev33.satoken.cookie.SaTokenCookie; +import cn.dev33.satoken.context.SaTokenContext; import cn.dev33.satoken.dao.SaTokenDao; -import cn.dev33.satoken.servlet.SaTokenServlet; -import cn.dev33.satoken.spring.SaTokenServletSpringImpl; +import cn.dev33.satoken.spring.SaTokenContextForSpring; import cn.dev33.satoken.stp.StpInterface; /** @@ -65,16 +64,6 @@ public class SaTokenSpringAutowired { SaTokenManager.setStpInterface(stpInterface); } - /** - * 注入Cookie操作Bean - * - * @param saTokenCookie SaTokenCookie对象 - */ - @Autowired(required = false) - public void setSaTokenCookie(SaTokenCookie saTokenCookie) { - SaTokenManager.setSaTokenCookie(saTokenCookie); - } - /** * 注入框架行为Bean * @@ -86,23 +75,23 @@ public class SaTokenSpringAutowired { } /** - * 获取Servlet操作Bean (Spring版) + * 获取容器交互Bean (Spring版) * - * @return Servlet操作Bean (Spring版) + * @return 容器交互Bean (Spring版) */ @Bean - public SaTokenServlet getSaTokenServlet() { - return new SaTokenServletSpringImpl(); + public SaTokenContext getSaTokenContext() { + return new SaTokenContextForSpring(); } /** - * 注入Servlet操作Bean + * 注入容器交互Bean * - * @param saTokenServlet SaTokenServlet对象 + * @param saTokenContext SaTokenContext对象 */ @Autowired - public void setSaTokenServlet(SaTokenServlet saTokenServlet) { - SaTokenManager.setSaTokenServlet(saTokenServlet); + public void setSaTokenContext(SaTokenContext saTokenContext) { + SaTokenManager.setSaTokenContext(saTokenContext); } /** @@ -112,7 +101,7 @@ public class SaTokenSpringAutowired { */ @Autowired(required = false) public void setPathMatcher(PathMatcher pathMatcher) { - SaTokenServletSpringImpl.setPathMatcher(pathMatcher); + SaTokenContextForSpring.setPathMatcher(pathMatcher); } diff --git a/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/interceptor/SaRouteInterceptor.java b/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/interceptor/SaRouteInterceptor.java index 9fe515c8..e71cad38 100644 --- a/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/interceptor/SaRouteInterceptor.java +++ b/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/interceptor/SaRouteInterceptor.java @@ -5,6 +5,8 @@ import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; +import cn.dev33.satoken.context.model.servlet.SaRequestForServlet; +import cn.dev33.satoken.context.model.servlet.SaResponseForServlet; import cn.dev33.satoken.router.SaRouteFunction; import cn.dev33.satoken.stp.StpUtil; @@ -57,7 +59,7 @@ public class SaRouteInterceptor implements HandlerInterceptor { StpUtil.checkLogin(); } else { // 否则执行函数 - function.run(request, response, handler); + function.run(new SaRequestForServlet(request), new SaResponseForServlet(response), handler); } // 通过验证 diff --git a/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SaTokenServletSpringImpl.java b/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SaTokenContextForSpring.java similarity index 61% rename from sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SaTokenServletSpringImpl.java rename to sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SaTokenContextForSpring.java index 96e9fc1b..025a0493 100644 --- a/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SaTokenServletSpringImpl.java +++ b/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SaTokenContextForSpring.java @@ -1,12 +1,13 @@ package cn.dev33.satoken.spring; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.springframework.util.AntPathMatcher; import org.springframework.util.PathMatcher; -import cn.dev33.satoken.servlet.SaTokenServlet; +import cn.dev33.satoken.context.SaTokenContext; +import cn.dev33.satoken.context.model.SaRequest; +import cn.dev33.satoken.context.model.SaResponse; +import cn.dev33.satoken.context.model.servlet.SaRequestForServlet; +import cn.dev33.satoken.context.model.servlet.SaResponseForServlet; /** * sa-token 对Cookie的相关操作 接口实现类 @@ -14,25 +15,24 @@ import cn.dev33.satoken.servlet.SaTokenServlet; * @author kong * */ -public class SaTokenServletSpringImpl implements SaTokenServlet { +public class SaTokenContextForSpring implements SaTokenContext { /** * 获取当前请求的Request对象 */ @Override - public HttpServletRequest getRequest() { - return SpringMVCUtil.getRequest(); + public SaRequest getRequest() { + return new SaRequestForServlet(SpringMVCUtil.getRequest()); } /** * 获取当前请求的Response对象 */ @Override - public HttpServletResponse getResponse() { - return SpringMVCUtil.getResponse(); + public SaResponse getResponse() { + return new SaResponseForServlet(SpringMVCUtil.getResponse()); } - /** * 路由匹配器 */ @@ -54,7 +54,7 @@ public class SaTokenServletSpringImpl implements SaTokenServlet { * @param pathMatcher 路由匹配器 */ public static void setPathMatcher(PathMatcher pathMatcher) { - SaTokenServletSpringImpl.pathMatcher = pathMatcher; + SaTokenContextForSpring.pathMatcher = pathMatcher; } /**