diff --git a/mvn clean.bat b/mvn clean.bat index 4aab58c5..bdd7d4dd 100644 --- a/mvn clean.bat +++ b/mvn clean.bat @@ -18,6 +18,7 @@ cd sa-token-demo-springboot-redis & call mvn clean & cd .. cd sa-token-demo-springboot-redisson & call mvn clean & cd .. cd sa-token-demo-test & call mvn clean & cd .. cd sa-token-demo-thymeleaf & call mvn clean & cd .. +cd sa-token-demo-beetl & call mvn clean & cd .. cd sa-token-demo-webflux & call mvn clean & cd .. cd sa-token-demo-webflux-springboot3 & call mvn clean & cd .. cd sa-token-demo-websocket & call mvn clean & cd .. @@ -44,10 +45,10 @@ cd sa-token-demo-oauth2-client & call mvn clean & cd .. cd sa-token-demo-oauth2-server & call mvn clean & cd .. cd .. -cd sa-token-demo-cross -cd sa-token-demo-cross-header-server & call mvn clean & cd .. -cd sa-token-demo-cross-cookie-server & call mvn clean & cd .. -cd .. +:: cd sa-token-demo-cross +:: cd sa-token-demo-cross-header-server & call mvn clean & cd .. +:: cd sa-token-demo-cross-cookie-server & call mvn clean & cd .. +:: cd .. cd sa-token-demo-dubbo cd sa-token-demo-dubbo-consumer & call mvn clean & cd .. diff --git a/sa-token-demo/sa-token-demo-beetl/pom.xml b/sa-token-demo/sa-token-demo-beetl/pom.xml new file mode 100644 index 00000000..e5d3de42 --- /dev/null +++ b/sa-token-demo/sa-token-demo-beetl/pom.xml @@ -0,0 +1,61 @@ + + 4.0.0 + cn.dev33 + sa-token-demo-beetl + 0.0.1-SNAPSHOT + + + + org.springframework.boot + spring-boot-starter-parent + 2.5.14 + + + + + + 1.37.0 + + + + + + + org.springframework.boot + spring-boot-starter-web + + + + + com.ibeetl + beetl-framework-starter + 1.2.40.Beetl.RELEASE + + + + + cn.dev33 + sa-token-spring-boot-starter + ${sa-token.version} + + + + + org.springframework.boot + spring-boot-devtools + provided + + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + + + diff --git a/sa-token-demo/sa-token-demo-beetl/src/main/java/com/pj/SaTokenBeetlDemoApplication.java b/sa-token-demo/sa-token-demo-beetl/src/main/java/com/pj/SaTokenBeetlDemoApplication.java new file mode 100644 index 00000000..116b9f09 --- /dev/null +++ b/sa-token-demo/sa-token-demo-beetl/src/main/java/com/pj/SaTokenBeetlDemoApplication.java @@ -0,0 +1,17 @@ +package com.pj; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +import cn.dev33.satoken.SaManager; + +@SpringBootApplication +public class SaTokenBeetlDemoApplication { + + public static void main(String[] args) { + SpringApplication.run(SaTokenBeetlDemoApplication.class, args); + System.out.println("\n启动成功,Sa-Token 配置如下:" + SaManager.getConfig()); + System.out.println("\n测试访问:http://localhost:8081/"); + } + +} \ No newline at end of file diff --git a/sa-token-demo/sa-token-demo-beetl/src/main/java/com/pj/satoken/SaTokenConfigure.java b/sa-token-demo/sa-token-demo-beetl/src/main/java/com/pj/satoken/SaTokenConfigure.java new file mode 100644 index 00000000..5425fcf3 --- /dev/null +++ b/sa-token-demo/sa-token-demo-beetl/src/main/java/com/pj/satoken/SaTokenConfigure.java @@ -0,0 +1,25 @@ +package com.pj.satoken; + +import cn.dev33.satoken.stp.StpUtil; +import com.ibeetl.starter.BeetlTemplateCustomize; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + + +/** + * [Sa-Token 权限认证] 配置类 + * @author click33 + * + */ +@Configuration +public class SaTokenConfigure implements WebMvcConfigurer { + + // 为 Beetl 视图引擎注册自定义函数: + // 通过 stp.xxx() 调用 StpUtil.stpLogic 对象上所有 public 方法 + @Bean + public BeetlTemplateCustomize beetlTemplateCustomize(){ + return groupTemplate -> groupTemplate.registerFunctionPackage("stp", StpUtil.stpLogic); + } + +} diff --git a/sa-token-demo/sa-token-demo-beetl/src/main/java/com/pj/satoken/StpInterfaceImpl.java b/sa-token-demo/sa-token-demo-beetl/src/main/java/com/pj/satoken/StpInterfaceImpl.java new file mode 100644 index 00000000..b6cc79f7 --- /dev/null +++ b/sa-token-demo/sa-token-demo-beetl/src/main/java/com/pj/satoken/StpInterfaceImpl.java @@ -0,0 +1,44 @@ +package com.pj.satoken; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.stereotype.Component; + +import cn.dev33.satoken.stp.StpInterface; + +/** + * 自定义权限验证接口扩展 + */ +@Component // 打开此注解,保证此类被springboot扫描,即可完成sa-token的自定义权限验证扩展 +public class StpInterfaceImpl implements StpInterface { + + /** + * 返回一个账号所拥有的权限码集合 + */ + @Override + public List getPermissionList(Object loginId, String loginType) { + // 本list仅做模拟,实际项目中要根据具体业务逻辑来查询权限 + List list = new ArrayList(); + list.add("101"); + list.add("user-add"); + list.add("user-delete"); + list.add("user-update"); + list.add("user-get"); + list.add("article-get"); + return list; + } + + /** + * 返回一个账号所拥有的角色标识集合 + */ + @Override + public List getRoleList(Object loginId, String loginType) { + // 本list仅做模拟,实际项目中要根据具体业务逻辑来查询角色 + List list = new ArrayList(); + list.add("admin"); + list.add("super-admin"); + return list; + } + +} diff --git a/sa-token-demo/sa-token-demo-beetl/src/main/java/com/pj/test/GlobalException.java b/sa-token-demo/sa-token-demo-beetl/src/main/java/com/pj/test/GlobalException.java new file mode 100644 index 00000000..16b295e7 --- /dev/null +++ b/sa-token-demo/sa-token-demo-beetl/src/main/java/com/pj/test/GlobalException.java @@ -0,0 +1,23 @@ +package com.pj.test; + +import cn.dev33.satoken.util.SaResult; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * 全局异常处理 + */ +@RestControllerAdvice +public class GlobalException { + + // 全局异常拦截(拦截项目中的所有异常) + @ExceptionHandler + public SaResult handlerException(Exception e, HttpServletRequest request, HttpServletResponse response) { + e.printStackTrace(); + return SaResult.error(e.getMessage()); + } + +} diff --git a/sa-token-demo/sa-token-demo-beetl/src/main/java/com/pj/test/TestController.java b/sa-token-demo/sa-token-demo-beetl/src/main/java/com/pj/test/TestController.java new file mode 100644 index 00000000..f1b25370 --- /dev/null +++ b/sa-token-demo/sa-token-demo-beetl/src/main/java/com/pj/test/TestController.java @@ -0,0 +1,39 @@ +package com.pj.test; + +import cn.dev33.satoken.stp.StpUtil; +import cn.dev33.satoken.util.SaResult; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +/** + * 测试 Controller + * @author click33 + * + */ +@RestController +public class TestController { + + // 首页 + @RequestMapping("/") + public Object index() { + return new ModelAndView("index.btl"); + } + + // 登录 + @RequestMapping("login") + public SaResult login(@RequestParam(defaultValue="10001") String id) { + StpUtil.login(id); + StpUtil.getSession().set("name", "zhangsan"); + return SaResult.ok(); + } + + // 注销 + @RequestMapping("logout") + public SaResult logout() { + StpUtil.logout(); + return SaResult.ok(); + } + +} diff --git a/sa-token-demo/sa-token-demo-beetl/src/main/resources/application.yml b/sa-token-demo/sa-token-demo-beetl/src/main/resources/application.yml new file mode 100644 index 00000000..aac39af7 --- /dev/null +++ b/sa-token-demo/sa-token-demo-beetl/src/main/resources/application.yml @@ -0,0 +1,5 @@ +# 端口 +server: + port: 8081 + + \ No newline at end of file diff --git a/sa-token-demo/sa-token-demo-beetl/src/main/resources/templates/index.btl b/sa-token-demo/sa-token-demo-beetl/src/main/resources/templates/index.btl new file mode 100644 index 00000000..d0e58aaf --- /dev/null +++ b/sa-token-demo/sa-token-demo-beetl/src/main/resources/templates/index.btl @@ -0,0 +1,50 @@ + + + + Sa-Token 集成 Beetl 示例 + + + + +
+

Sa-Token 集成 Beetl —— 测试页面

+

当前是否登录:${stp.isLogin()}

+

+ 操作: + 登录 + 注销 +

+ +

+ 登录之后才能显示: + <% if(stp.isLogin()){ %> + value + <%}%> +

+

+ 不登录才能显示: + <% if(!stp.isLogin()){ %> + value + <%}%> +

+ +

具有角色 admin 才能显示:<% if(stp.hasRole("admin")){ %> value <% } %>

+

同时具备多个角色才能显示:<% if(stp.hasRoleAnd("admin", "ceo", "cto")){ %> value <% } %>

+

只要具有其中一个角色就能显示:<% if(stp.hasRoleOr("admin", "ceo", "cto")){ %> value <% } %>

+

不具有角色 admin 才能显示:<% if(!stp.hasRole("admin")){ %> value <% } %>

+ +

具有权限 user-add 才能显示:<% if(stp.hasPermission("user-add")){ %> value <% } %>

+

同时具备多个权限才能显示:<% if(stp.hasPermissionAnd("user-add", "user-delete", "user-get")){ %> value <% } %>

+

只要具有其中一个权限就能显示:<% if(stp.hasPermissionOr("user-add", "user-delete", "user-get")){ %> value <% } %>

+

不具有权限 user-add 才能显示:<% if(!stp.hasPermission("user-add")){ %> value <% } %>

+ + <% if(stp.isLogin()){ %> +

+ 从SaSession中取值:${stp.getSession()["name"]}
+ 或:${stp.getSession().name} +

+ <%}%> + +
+ +