diff --git a/sa-token-demo/sa-token-demo-ssm/README.md b/sa-token-demo/sa-token-demo-ssm/README.md new file mode 100644 index 00000000..e694b724 --- /dev/null +++ b/sa-token-demo/sa-token-demo-ssm/README.md @@ -0,0 +1,10 @@ + +## SSM 架构集成 Sa-Token 示例 + +说是SSM,其实没有M,仅仅是给使用 SpringMVC 非 SpringBoot 的项目提供一个简单的 Sa-Token 集成示例。 + +直接运行项目即可,里面注释挺全的,也不必做过多说明了 +(其实就是我懒,光搭建起来这个架子就累瘫了,各种版本兼容问题报起错来大汗淋漓,推荐新项目能上 SpringBoot 就赶紧上吧,千万别在SSM上浪费生命)。 + +推荐 jdk8 + tomcat8。 + diff --git a/sa-token-demo/sa-token-demo-ssm/pom.xml b/sa-token-demo/sa-token-demo-ssm/pom.xml new file mode 100644 index 00000000..fea3458d --- /dev/null +++ b/sa-token-demo/sa-token-demo-ssm/pom.xml @@ -0,0 +1,133 @@ + + + 4.0.0 + cn.dev33 + sa-token-demo-ssm + war + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + + 0.0.1-SNAPSHOT + + + + UTF-8 + UTF-8 + + 5.3.7 + 2.16.1 + 1.37.0 + + + + + + + javax.servlet + javax.servlet-api + 3.1.0 + + + + + org.springframework + spring-core + ${spring.version} + + + org.springframework + spring-web + ${spring.version} + + + org.springframework + spring-oxm + ${spring.version} + + + org.springframework + spring-tx + ${spring.version} + + + org.springframework + spring-webmvc + ${spring.version} + + + org.springframework + spring-context + ${spring.version} + + + org.springframework + spring-context-support + ${spring.version} + + + org.springframework + spring-aop + ${spring.version} + + + + + com.fasterxml.jackson.core + jackson-core + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + + + cn.dev33 + sa-token-spring-boot-starter + ${sa-token.version} + + + org.springframework.boot + spring-boot-starter-web + + + + + + + cn.dev33 + sa-token-redis-jackson + ${sa-token.version} + + + redis.clients + jedis + 3.8.0 + + + org.springframework.data + spring-data-redis + 2.3.9.RELEASE + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + 2.11.2 + + + + + \ No newline at end of file diff --git a/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/controller/AtController.java b/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/controller/AtController.java new file mode 100644 index 00000000..88176cc0 --- /dev/null +++ b/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/controller/AtController.java @@ -0,0 +1,74 @@ +package com.pj.controller; + +import cn.dev33.satoken.annotation.*; +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.RestController; + +/** + * 注解鉴权测试 + * @author click33 + * + */ +@RestController +@RequestMapping("/at/") +public class AtController { + + // 登录认证,登录之后才可以进入方法 ---- http://localhost:8080/sa_token_demo_ssm_war/at/checkLogin + @SaCheckLogin + @RequestMapping("checkLogin") + public SaResult checkLogin() { + return SaResult.ok(); + } + + // 权限认证,具备user-add权限才可以进入方法 ---- http://localhost:8080/sa_token_demo_ssm_war/at/checkPermission + @SaCheckPermission("user-add") + @RequestMapping("checkPermission") + public SaResult checkPermission() { + return SaResult.ok(); + } + + // 权限认证,同时具备所有权限才可以进入 ---- http://localhost:8080/sa_token_demo_ssm_war/at/checkPermissionAnd + @SaCheckPermission({"user-add", "user-delete", "user-update"}) + @RequestMapping("checkPermissionAnd") + public SaResult checkPermissionAnd() { + return SaResult.ok(); + } + + // 权限认证,只要具备其中一个就可以进入 ---- http://localhost:8080/sa_token_demo_ssm_war/at/checkPermissionOr + @SaCheckPermission(value = {"user-add", "user-delete", "user-update"}, mode = SaMode.OR) + @RequestMapping("checkPermissionOr") + public SaResult checkPermissionOr() { + return SaResult.ok(); + } + + // 角色认证,只有具备admin角色才可以进入 ---- http://localhost:8080/sa_token_demo_ssm_war/at/checkRole + @SaCheckRole("admin") + @RequestMapping("checkRole") + public SaResult checkRole() { + return SaResult.ok(); + } + + // 完成二级认证 ---- http://localhost:8080/sa_token_demo_ssm_war/at/openSafe + @RequestMapping("openSafe") + public SaResult openSafe() { + StpUtil.openSafe(200); // 打开二级认证,有效期为200秒 + return SaResult.ok(); + } + + // 通过二级认证后才可以进入 ---- http://localhost:8080/sa_token_demo_ssm_war/at/checkSafe + @SaCheckSafe + @RequestMapping("checkSafe") + public SaResult checkSafe() { + return SaResult.ok(); + } + + // 通过Basic认证后才可以进入 ---- http://localhost:8080/sa_token_demo_ssm_war/at/checkBasic + @SaCheckBasic(account = "sa:123456") + @RequestMapping("checkBasic") + public SaResult checkBasic() { + return SaResult.ok(); + } + +} diff --git a/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/controller/LoginController.java b/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/controller/LoginController.java new file mode 100644 index 00000000..c2138435 --- /dev/null +++ b/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/controller/LoginController.java @@ -0,0 +1,55 @@ +package com.pj.controller; + +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.RestController; + +/** + * 登录测试 + * @author click33 + * + */ +@RestController +@RequestMapping("/acc/") +public class LoginController { + + // 测试登录 ---- http://localhost:8080/sa_token_demo_ssm_war/acc/doLogin?name=zhang&pwd=123456 + @RequestMapping("doLogin") + public SaResult doLogin(String name, String pwd) { + System.out.println("-------- 12344"); + // 此处仅作模拟示例,真实项目需要从数据库中查询数据进行比对 + if("zhang".equals(name) && "123456".equals(pwd)) { + StpUtil.login(10001); + return SaResult.ok("登录成功"); + } + return SaResult.error("登录失败"); + } + + // 查询登录状态 ---- http://localhost:8080/sa_token_demo_ssm_war/acc/isLogin + @RequestMapping("isLogin") + public SaResult isLogin() { + return SaResult.ok("是否登录:" + StpUtil.isLogin()); + } + + // 校验登录 ---- http://localhost:8080/sa_token_demo_ssm_war/acc/checkLogin + @RequestMapping("checkLogin") + public SaResult checkLogin() { + StpUtil.checkLogin(); + return SaResult.ok(); + } + + // 查询 Token 信息 ---- http://localhost:8080/sa_token_demo_ssm_war/acc/tokenInfo + @RequestMapping("tokenInfo") + public SaResult tokenInfo() { + return SaResult.data(StpUtil.getTokenInfo()); + } + + // 测试注销 ---- http://localhost:8080/sa_token_demo_ssm_war/acc/logout + @RequestMapping("logout") + public SaResult logout() { + StpUtil.logout(); + return SaResult.ok(); + } + +} diff --git a/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/controller/PageController.java b/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/controller/PageController.java new file mode 100644 index 00000000..a996f76f --- /dev/null +++ b/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/controller/PageController.java @@ -0,0 +1,38 @@ +package com.pj.controller; + +import cn.dev33.satoken.stp.StpUtil; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +/** + * 页面访问测试 + * @author click33 + * @since 2024/4/14 + */ +@Controller +public class PageController { + + // http://localhost:8080/sa_token_demo_ssm_war/home + @RequestMapping("/home") + public String index() { + System.out.println("------- home页,所有游客可访问"); + return "home"; + } + + // http://localhost:8080/sa_token_demo_ssm_war/user + @RequestMapping("/user") + public String user() { + System.out.println("------- user页,登录后才能访问"); + StpUtil.checkLogin(); + return "user"; + } + + // http://localhost:8080/sa_token_demo_ssm_war/admin + @RequestMapping("/admin") + public String admin() { + System.out.println("------- admin页,具有admin角色才能访问"); + StpUtil.checkRole("admin"); + return "admin"; + } + +} \ No newline at end of file diff --git a/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/controller/TestController.java b/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/controller/TestController.java new file mode 100644 index 00000000..b20fec1e --- /dev/null +++ b/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/controller/TestController.java @@ -0,0 +1,54 @@ +package com.pj.controller; + +import cn.dev33.satoken.context.SaHolder; +import cn.dev33.satoken.stp.SaLoginConfig; +import cn.dev33.satoken.stp.StpUtil; +import cn.dev33.satoken.util.SaFoxUtil; +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 java.util.Date; + +/** + * 测试专用Controller + * @author click33 + * + */ +@RestController +@RequestMapping("/test/") +public class TestController { + + // 测试登录 ---- http://localhost:8080/sa_token_demo_ssm_war/test/login + @RequestMapping("login") + public SaResult login(@RequestParam(defaultValue = "10001") long id) { + StpUtil.login(id, SaLoginConfig.setActiveTimeout(-1)); + return SaResult.ok("登录成功"); + } + + // 测试 浏览器访问: http://localhost:8080/sa_token_demo_ssm_war/test/test + @RequestMapping("test") + public SaResult test() { + System.out.println("------------进来了 " + SaFoxUtil.formatDate(new Date())); + // StpUtil.getLoginId(); + // 返回 + return SaResult.data(null); + } + + // 测试 浏览器访问: http://localhost:8080/sa_token_demo_ssm_war/test/test2 + @RequestMapping("test2") + public SaResult test2() { + return SaResult.ok(); + } + + // 测试 浏览器访问: http://localhost:8080/sa_token_demo_ssm_war/getRequestPath + @RequestMapping("getRequestPath") + public SaResult getRequestPath() { + System.out.println("------------ 测试访问路径获取 "); +// System.out.println("SpringMVCUtil.getRequest().getRequestURI() " + SpringMVCUtil.getRequest().getRequestURI()); + System.out.println("SaHolder.getRequest().getRequestPath() " + SaHolder.getRequest().getRequestPath()); + return SaResult.ok(); + } + +} diff --git a/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/current/GlobalException.java b/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/current/GlobalException.java new file mode 100644 index 00000000..7ac105cc --- /dev/null +++ b/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/current/GlobalException.java @@ -0,0 +1,29 @@ +package com.pj.current; + +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) { + + // 打印堆栈,以供调试 + System.err.println("全局异常---------------"); + e.printStackTrace(); + + // 返回给前端 + return SaResult.error(e.getMessage()); + } + +} diff --git a/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/current/NotFoundHandle.java b/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/current/NotFoundHandle.java new file mode 100644 index 00000000..5d456fd9 --- /dev/null +++ b/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/current/NotFoundHandle.java @@ -0,0 +1,24 @@ +package com.pj.current; + +import cn.dev33.satoken.util.SaResult; +import org.springframework.boot.web.servlet.error.ErrorController; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * 处理 404 + * @author click33 + */ +@RestController +public class NotFoundHandle implements ErrorController { + + @RequestMapping("/error") + public Object error(HttpServletRequest request, HttpServletResponse response) { + response.setStatus(200); + return SaResult.get(404, "not found", null); + } + +} diff --git a/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/model/SysUser.java b/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/model/SysUser.java new file mode 100644 index 00000000..b434edb3 --- /dev/null +++ b/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/model/SysUser.java @@ -0,0 +1,83 @@ +package com.pj.model; + +/** + * User 实体类 + * + * @author click33 + * @since 2022-10-15 + */ +public class SysUser { + + public SysUser() {} + + public SysUser(long id, String name, int age) { + super(); + this.id = id; + this.name = name; + this.age = age; + } + + + /** + * 用户id + */ + private long id; + + /** + * 用户名称 + */ + private String name; + + /** + * 用户年龄 + */ + private int age; + + /** + * @return id + */ + public long getId() { + return id; + } + + /** + * @param id 要设置的 id + */ + public void setId(long id) { + this.id = id; + } + + /** + * @return name + */ + public String getName() { + return name; + } + + /** + * @param name 要设置的 name + */ + public void setName(String name) { + this.name = name; + } + + /** + * @return age + */ + public int getAge() { + return age; + } + + /** + * @param age 要设置的 age + */ + public void setAge(int age) { + this.age = age; + } + + @Override + public String toString() { + return "SysUser [id=" + id + ", name=" + name + ", age=" + age + "]"; + } + +} diff --git a/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/satoken/SaInterceptorImpl.java b/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/satoken/SaInterceptorImpl.java new file mode 100644 index 00000000..56269592 --- /dev/null +++ b/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/satoken/SaInterceptorImpl.java @@ -0,0 +1,32 @@ +package com.pj.satoken; + +import cn.dev33.satoken.context.SaHolder; +import cn.dev33.satoken.interceptor.SaInterceptor; + +/** + * 路由拦截鉴权测试 + * @author click33 + * @since 2024/4/15 + */ +public class SaInterceptorImpl extends SaInterceptor { + + public SaInterceptorImpl() { + super(hadnle->{ + System.out.println("-------------- SA 路由拦截鉴权,你访问的是:" + SaHolder.getRequest().getRequestPath()); + // System.out.println("你访问的是:" + SaHolder.getRequest().getRequestPath()); + // SaRouter.match("/test/test", r -> StpUtil.checkLogin()); + + // 根据路由划分模块,不同模块不同鉴权 +// SaRouter.match("/user/**", r -> StpUtil.checkPermission("user")); +// SaRouter.match("/admin/**", r -> StpUtil.checkPermission("admin")); +// SaRouter.match("/goods/**", r -> StpUtil.checkPermission("goods")); +// SaRouter.match("/orders/**", r -> StpUtil.checkPermission("orders")); +// SaRouter.match("/notice/**", r -> StpUtil.checkPermission("notice")); +// SaRouter.match("/comment/**", r -> StpUtil.checkPermission("comment")); + + // 更多写法参考:https://sa-token.cc/doc.html#/use/route-check + + }); + } + +} \ No newline at end of file diff --git a/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/satoken/SaTokenBeanInjection.java b/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/satoken/SaTokenBeanInjection.java new file mode 100644 index 00000000..b0944713 --- /dev/null +++ b/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/satoken/SaTokenBeanInjection.java @@ -0,0 +1,54 @@ +package com.pj.satoken; + +import cn.dev33.satoken.application.ApplicationInfo; +import cn.dev33.satoken.config.SaTokenConfig; +import cn.dev33.satoken.dao.SaTokenDaoRedisJackson; +import cn.dev33.satoken.log.SaLog; +import cn.dev33.satoken.spring.SaBeanInject; +import cn.dev33.satoken.spring.SaTokenContextForSpring; +import cn.dev33.satoken.spring.json.SaJsonTemplateForJackson; +import org.springframework.data.redis.connection.RedisConnectionFactory; + +/** + * 手动注入 Sa-Token 所需要的组件 + * @author click33 + * @since 2024/4/15 + */ +public class SaTokenBeanInjection { + + public SaTokenBeanInjection( + SaLog log, + SaTokenConfig config, + RedisConnectionFactory connectionFactory, + String routePrefix + ) { + System.out.println("---------------- 手动注入 Sa-Token 所需要的组件 start ----------------"); + + // 日志组件、配置信息 + SaBeanInject inject = new SaBeanInject(log, config); + + // 基于 Spring 的上下文处理器 + inject.setSaTokenContext(new SaTokenContextForSpring()); + + // 基于 Jackson 的 json解析器 + inject.setSaJsonTemplate(new SaJsonTemplateForJackson()); + + // 基于 Jackson 序列化的 Redis 持久化组件 + SaTokenDaoRedisJackson saTokenDaoRedisJackson = new SaTokenDaoRedisJackson(); + saTokenDaoRedisJackson.init(connectionFactory); + inject.setSaTokenDao(saTokenDaoRedisJackson); + + // 权限和角色数据 + inject.setStpInterface(new StpInterfaceImpl()); + + // 项目路由前缀,方便路由拦截鉴权的 + ApplicationInfo.routePrefix = routePrefix; + // System.out.println(routePrefix); + + // 注入更多组件 .... + // inject.setXxx + + System.out.println("---------------- 手动注入 Sa-Token 所需要的组件 end ----------------"); + } + +} \ No newline at end of file diff --git a/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/satoken/StpInterfaceImpl.java b/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/satoken/StpInterfaceImpl.java new file mode 100644 index 00000000..45637719 --- /dev/null +++ b/sa-token-demo/sa-token-demo-ssm/src/main/java/com/pj/satoken/StpInterfaceImpl.java @@ -0,0 +1,41 @@ +package com.pj.satoken; + +import cn.dev33.satoken.stp.StpInterface; + +import java.util.ArrayList; +import java.util.List; + +/** + * 自定义权限验证接口扩展 + */ +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-ssm/src/main/resources/application.yml b/sa-token-demo/sa-token-demo-ssm/src/main/resources/application.yml new file mode 100644 index 00000000..92a664b2 --- /dev/null +++ b/sa-token-demo/sa-token-demo-ssm/src/main/resources/application.yml @@ -0,0 +1,49 @@ +# 端口 +server: + port: 8081 + +############## Sa-Token 配置 (文档: https://sa-token.cc) ############## +sa-token: + # token 名称 (同时也是 cookie 名称) + token-name: satoken + # token 有效期(单位:秒) 默认30天,-1 代表永久有效 + timeout: 2592000 + # token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结 + active-timeout: -1 + # 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录) + is-concurrent: true + # 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token) + is-share: true + # token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik) + token-style: uuid + # 是否输出操作日志 + is-log: true + +spring: + # redis配置 + redis: + # Redis数据库索引(默认为0) + database: 0 + # Redis服务器地址 + host: 127.0.0.1 + # Redis服务器连接端口 + port: 6379 + # Redis服务器连接密码(默认为空) + password: + # 连接超时时间 + timeout: 10s + lettuce: + pool: + # 连接池最大连接数 + max-active: 200 + # 连接池最大阻塞等待时间(使用负值表示没有限制) + max-wait: -1ms + # 连接池中的最大空闲连接 + max-idle: 10 + # 连接池中的最小空闲连接 + min-idle: 0 + + + + + \ No newline at end of file diff --git a/sa-token-demo/sa-token-demo-ssm/src/main/resources/applicationContext.xml b/sa-token-demo/sa-token-demo-ssm/src/main/resources/applicationContext.xml new file mode 100644 index 00000000..36145594 --- /dev/null +++ b/sa-token-demo/sa-token-demo-ssm/src/main/resources/applicationContext.xml @@ -0,0 +1,22 @@ + + + + + + + + \ No newline at end of file diff --git a/sa-token-demo/sa-token-demo-ssm/src/main/resources/spring-mvc.xml b/sa-token-demo/sa-token-demo-ssm/src/main/resources/spring-mvc.xml new file mode 100644 index 00000000..038332c0 --- /dev/null +++ b/sa-token-demo/sa-token-demo-ssm/src/main/resources/spring-mvc.xml @@ -0,0 +1,59 @@ + + + + + + + + text/html;charset=UTF-8 + text/json;charset=UTF-8 + application/json;charset=UTF-8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sa-token-demo/sa-token-demo-ssm/src/main/resources/spring-redis.xml b/sa-token-demo/sa-token-demo-ssm/src/main/resources/spring-redis.xml new file mode 100644 index 00000000..d2bac2cd --- /dev/null +++ b/sa-token-demo/sa-token-demo-ssm/src/main/resources/spring-redis.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sa-token-demo/sa-token-demo-ssm/src/main/resources/spring-sa-token.xml b/sa-token-demo/sa-token-demo-ssm/src/main/resources/spring-sa-token.xml new file mode 100644 index 00000000..a75dfc69 --- /dev/null +++ b/sa-token-demo/sa-token-demo-ssm/src/main/resources/spring-sa-token.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sa-token-demo/sa-token-demo-ssm/src/main/webapp/WEB-INF/jsp/admin.jsp b/sa-token-demo/sa-token-demo-ssm/src/main/webapp/WEB-INF/jsp/admin.jsp new file mode 100644 index 00000000..100a7e69 --- /dev/null +++ b/sa-token-demo/sa-token-demo-ssm/src/main/webapp/WEB-INF/jsp/admin.jsp @@ -0,0 +1,10 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Admin.jsp + + +

Admin.jsp

+

具有 admin 角色才可以访问

+ + diff --git a/sa-token-demo/sa-token-demo-ssm/src/main/webapp/WEB-INF/jsp/home.jsp b/sa-token-demo/sa-token-demo-ssm/src/main/webapp/WEB-INF/jsp/home.jsp new file mode 100644 index 00000000..8d3b705c --- /dev/null +++ b/sa-token-demo/sa-token-demo-ssm/src/main/webapp/WEB-INF/jsp/home.jsp @@ -0,0 +1,10 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Home.jsp + + +

Home.jsp

+

所有游客可访问

+ + diff --git a/sa-token-demo/sa-token-demo-ssm/src/main/webapp/WEB-INF/jsp/user.jsp b/sa-token-demo/sa-token-demo-ssm/src/main/webapp/WEB-INF/jsp/user.jsp new file mode 100644 index 00000000..81645ba1 --- /dev/null +++ b/sa-token-demo/sa-token-demo-ssm/src/main/webapp/WEB-INF/jsp/user.jsp @@ -0,0 +1,10 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + User.jsp + + +

User.jsp

+

登录后才可以访问

+ + diff --git a/sa-token-demo/sa-token-demo-ssm/src/main/webapp/WEB-INF/web.xml b/sa-token-demo/sa-token-demo-ssm/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 00000000..1d316ffc --- /dev/null +++ b/sa-token-demo/sa-token-demo-ssm/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,50 @@ + + + yixiao2 + + + + contextConfigLocation + classpath:applicationContext.xml + + + org.springframework.web.context.ContextLoaderListener + + + + springmvc + org.springframework.web.servlet.DispatcherServlet + + contextConfigLocation + classpath:spring-mvc.xml + + 1 + + + + springmvc + / + + + default + /static/* + + + + + 404 + /error + + + + + + index.jsp + + \ No newline at end of file diff --git a/sa-token-demo/sa-token-demo-ssm/src/main/webapp/index.jsp b/sa-token-demo/sa-token-demo-ssm/src/main/webapp/index.jsp new file mode 100644 index 00000000..051d1446 --- /dev/null +++ b/sa-token-demo/sa-token-demo-ssm/src/main/webapp/index.jsp @@ -0,0 +1,10 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + 欢迎页 index.jsp + + +

欢迎页 index.jsp

+

这是个外置位的 jsp 页面,可以不经过 Controller 直接访问到

+ +