diff --git a/README.md b/README.md index d8ca51b793a1c8d81b09433d22175bdfd63456d7..a2f386735f8c9a7e3b661f51323edf126503b556 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,15 @@ spring: **前端** -纯静态的,可直接在浏览器运行,修改配置`web/Pear.../componet/pear/pear.js` +2种方式部署 + +**一、Spring Boot虚拟磁盘模式** + +什么都不用做,直接访问`http://localhost:8080/admin` + +**二、纯静态模式** + +纯静态的,可直接在浏览器运行,修改配置`web/admin/componet/pear/pear.js` ```javascript const EasyAdminContext = { @@ -65,7 +73,7 @@ const EasyAdminContext = { }; ``` -直接在浏览器访问`web/Pear.../index.html` +直接在浏览器访问`web/admin/index.html` diff --git a/pom.xml b/pom.xml index 61b42258b9b1947084a4f032a71fae73af63c7e3..029e3f46bb8920ef66907011884cba2aafa411d3 100644 --- a/pom.xml +++ b/pom.xml @@ -83,7 +83,7 @@ cn.dev33 sa-token-spring-boot-starter - 1.15.2 + 1.24.0 diff --git a/src/main/java/com/laker/admin/config/WebMvcConfig.java b/src/main/java/com/laker/admin/config/WebMvcConfig.java index 3adce64344dca59f8415d78d3da4539461a6cbbf..1eb72de0932dbba6badc5813cd016954288c2420 100644 --- a/src/main/java/com/laker/admin/config/WebMvcConfig.java +++ b/src/main/java/com/laker/admin/config/WebMvcConfig.java @@ -1,5 +1,6 @@ package com.laker.admin.config; +import cn.dev33.satoken.interceptor.SaAnnotationInterceptor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; @@ -26,7 +27,9 @@ public class WebMvcConfig implements WebMvcConfigurer { */ @Override public void addInterceptors(InterceptorRegistry registry) { -// + // 注册注解拦截器,并排除不需要注解鉴权的接口地址 (与登录拦截器无关) + registry.addInterceptor(new SaAnnotationInterceptor()).addPathPatterns("/**") + .excludePathPatterns("/admin/**", "/admin/login.html", "/api/v1/login"); } @Override diff --git a/src/main/java/com/laker/admin/framework/ext/satoken/LakerSaAnnotationInterceptor.java b/src/main/java/com/laker/admin/framework/ext/satoken/LakerSaAnnotationInterceptor.java deleted file mode 100644 index 33405e059a589f6040ac4890c6824d2ed910b182..0000000000000000000000000000000000000000 --- a/src/main/java/com/laker/admin/framework/ext/satoken/LakerSaAnnotationInterceptor.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.laker.admin.framework.ext.satoken; - -import cn.dev33.satoken.interceptor.SaAnnotationInterceptor; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * 对默认的做增强,默认拦截登录check - */ -public class LakerSaAnnotationInterceptor extends SaAnnotationInterceptor { - - /** - * 每次请求之前触发的方法 - */ - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) - throws Exception { -// // 获取处理method -// if (handler instanceof HandlerMethod == false) { -// return true; -// } - // 判断是否登录 - super.getStpLogic().checkLogin(); - // 调用父类的默认方法 - return super.preHandle(request, response, handler); - - } -} diff --git a/src/main/java/com/laker/admin/framework/ext/satoken/SaTokenExtActionImpl.java b/src/main/java/com/laker/admin/framework/ext/satoken/SaTokenExtActionImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..7713e925f31c3676521f2ced2f98f10d2cc72403 --- /dev/null +++ b/src/main/java/com/laker/admin/framework/ext/satoken/SaTokenExtActionImpl.java @@ -0,0 +1,33 @@ +package com.laker.admin.framework.ext.satoken; + +import cn.dev33.satoken.action.SaTokenActionDefaultImpl; +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.stp.StpUtil; +import org.springframework.stereotype.Component; + +import java.lang.reflect.AnnotatedElement; + +/** + * Sa-Token 逻辑代理接口 [默认实现类] + * + * @author kong + */ +@Component +public class SaTokenExtActionImpl extends SaTokenActionDefaultImpl { + + /** + * 从指定元素校验注解 + * + * @param target see note + */ + @Override + protected void validateAnnotation(AnnotatedElement target) { + super.validateAnnotation(target); + // 校验 @SaCheckLogin 注解 + if (!target.isAnnotationPresent(SaCheckLogin.class)) { + StpUtil.checkLogin(); + } + + } + +} diff --git a/src/main/java/com/laker/admin/framework/handler/GlobalExceptionHandler.java b/src/main/java/com/laker/admin/framework/handler/GlobalExceptionHandler.java index fbc07acdf76f1d6b77f6f95eaa7c78e2eb248724..8763d215869520250da7fd946b9ff0efdfb5266f 100644 --- a/src/main/java/com/laker/admin/framework/handler/GlobalExceptionHandler.java +++ b/src/main/java/com/laker/admin/framework/handler/GlobalExceptionHandler.java @@ -3,8 +3,8 @@ package com.laker.admin.framework.handler; import cn.dev33.satoken.exception.NotLoginException; import cn.hutool.core.lang.Dict; -import com.laker.admin.framework.exception.BusinessException; import com.laker.admin.framework.Response; +import com.laker.admin.framework.exception.BusinessException; import com.laker.admin.utils.http.HttpServletRequestUtil; import lombok.extern.slf4j.Slf4j; import org.hibernate.validator.internal.engine.path.NodeImpl; @@ -134,7 +134,7 @@ public class GlobalExceptionHandler { public Response handleMaxSizeException(NotLoginException e, HttpServletResponse response) throws IOException { log.info(HttpServletRequestUtil.getAllRequestInfo()); log.error(e.getMessage(), e); - response.sendRedirect("/index.html"); + response.sendRedirect("/admin/login.html"); return Response.error("401", e.getMessage()); } diff --git a/src/main/java/com/laker/admin/module/sys/controller/IndexController.java b/src/main/java/com/laker/admin/module/sys/controller/IndexController.java new file mode 100644 index 0000000000000000000000000000000000000000..bef8c036696bc5ba4acc9d36fb56786823668f89 --- /dev/null +++ b/src/main/java/com/laker/admin/module/sys/controller/IndexController.java @@ -0,0 +1,16 @@ +package com.laker.admin.module.sys.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +@RequestMapping("/admin") +public class IndexController { + + @GetMapping({"", "/index", "/"}) + public String adminIndex() { + return "redirect:/admin/index.html"; + } + +} \ No newline at end of file diff --git a/src/main/java/com/laker/admin/module/sys/controller/LoginController.java b/src/main/java/com/laker/admin/module/sys/controller/LoginController.java index dc76db6642df6bb82da8b0e05f93c94ebbb6030d..9f607b99eac6a7ee9539c1fa983cf9b3a2e6088b 100644 --- a/src/main/java/com/laker/admin/module/sys/controller/LoginController.java +++ b/src/main/java/com/laker/admin/module/sys/controller/LoginController.java @@ -40,7 +40,7 @@ public class LoginController { if (sysUser == null) { return Response.error("5001", "用户名或密码不正确"); } - StpUtil.setLoginId(1); + StpUtil.login(1); return Response.ok(StpUtil.getTokenInfo()); } diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index a72a2c549c88657053a7be6e9c762bbf19826afd..a408ed5fff38122db45ae6e39ac4268300a38dfe 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -12,20 +12,6 @@ spring: max-active: 300 test-on-borrow: true validation-query: select 1 - # sa-token配置 - sa-token: - # token名称 (同时也是cookie名称) - token-name: LakerToken - # token有效期,单位s 默认30天, -1代表永不过期 - # timeout: 1800 - # token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒 - # activity-timeout: 3000 - # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) - allow-concurrent-login: true - # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) - is-share: false - # token风格 - token-style: simple-uuid profiles: active: dev task: @@ -49,6 +35,20 @@ knife4j: enable: true javamelody: enabled: true + # sa-token配置 +sa-token: + # token名称 (同时也是cookie名称) + token-name: LakerToken + # token有效期,单位s 默认30天, -1代表永不过期 + # timeout: 1800 + # token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒 + # activity-timeout: 3000 + # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) + allow-concurrent-login: true + # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) + is-share: false + # token风格 + token-style: simple-uuid video: url: http://1.1.1.1 admin: diff --git a/web/admin/index.html b/web/admin/index.html index 6fa85e656d8e326118ddabfbd1aaf8d865109820..6962ce919ef307a19ebfff91ca9ce52ffaf1e15a 100644 --- a/web/admin/index.html +++ b/web/admin/index.html @@ -87,13 +87,28 @@ var convert = layui.convert; var popup = layui.popup; + var user = layui.data('user'); + if (JSON.stringify(user) == "{}") { + location.href = "login.html"; + } + console.log(user) admin.setAvatar("admin/images/avatar.jpg", "就眠仪式"); admin.setConfigType("yml"); admin.setConfigPath("config/pear.config.yml"); console.log(admin.readConfig()); let readConfig = admin.readConfig(); - readConfig.menu.data = EasyAdminContext.url + "/sys/menu/tree" + const menuUrl = EasyAdminContext.url + "/sys/menu/tree"; + $.ajax({ + url: menuUrl, + dataType: 'json', + success: function () { + }, + error: function () { + location.href = "login.html"; + } + }); + readConfig.menu.data = menuUrl; admin.render(readConfig); // 登出逻辑 diff --git a/web/admin/login.html b/web/admin/login.html index edce7e908361d64b6ce319582b838ba4d93593d9..5ea3b279cf3f26c8339ff9d386535efe0b7b1240 100644 --- a/web/admin/login.html +++ b/web/admin/login.html @@ -61,12 +61,19 @@ type: 'post', success: function (result) { if (result.success) { + + layui.data('user', { + key: result.data.tokenName + , value: result.data.tokenValue + }); // 动画 button.load({ elem: '.login', time: 500, done: function () { + popup.success("登录成功", function () { + location.href = "index.html" }); }