From 167cff595e716c4f67c5e3a8ae2d80b3db786cda Mon Sep 17 00:00:00 2001 From: shengzhang <2393584716@qq.com> Date: Mon, 7 Sep 2020 02:21:35 +0800 Subject: [PATCH] =?UTF-8?q?v1.4.0=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 30 +- sa-token-demo-springboot/.gitignore | 4 +- sa-token-demo-springboot/pom.xml | 48 +--- .../java/com/pj/SaTokenDemoApplication.java | 8 +- .../java/com/pj/satoken/MySaTokenConfig.java | 28 +- .../main/java/com/pj/test/TestController.java | 30 +- .../src/main/resources/application.yml | 35 +-- sa-token-dev/.gitignore | 6 +- sa-token-dev/pom.xml | 9 +- .../java/cn/dev33/satoken/SaTokenManager.java | 19 +- .../java/cn/dev33/satoken/SaTokenUtil.java | 30 -- .../annotation/SaCheckInterceptor.java | 21 +- .../satoken/annotation/SaCheckLogin.java | 2 + .../satoken/annotation/SaCheckPermission.java | 4 +- .../dev33/satoken/config/SaTokenConfig.java | 39 ++- .../satoken/config/SaTokenConfigFactory.java | 11 +- .../java/cn/dev33/satoken/dao/SaTokenDao.java | 8 +- .../dev33/satoken/dao/SaTokenDaoDefault.java | 6 +- .../satoken/exception/NotLoginException.java | 17 +- .../exception/NotPermissionException.java | 15 +- .../cn/dev33/satoken/session/SaSession.java | 25 +- .../satoken/session/SaSessionCustomUtil.java | 10 +- .../cn/dev33/satoken/spring/SaTokenSetup.java | 2 + .../dev33/satoken/spring/SpringSaToken.java | 22 +- .../cn/dev33/satoken/stp/StpInterface.java | 9 +- .../satoken/stp/StpInterfaceDefaultImpl.java | 5 +- .../java/cn/dev33/satoken/stp/StpLogic.java | 270 ++++++++++-------- .../java/cn/dev33/satoken/stp/StpUtil.java | 95 +++--- .../cn/dev33/satoken/util/SaCookieUtil.java | 34 +-- .../dev33/satoken/util/SaTokenInsideUtil.java | 40 +++ ...{SpringMVCUtil.java => SpringMvcUtil.java} | 5 +- .../main/java/com/pj/SaTokenApplication.java | 18 -- .../src/main/resources/application.yml | 20 -- sa-token-doc/doc/README.md | 30 +- sa-token-doc/doc/index.html | 2 +- sa-token-doc/doc/logo-150.png | Bin 0 -> 2938 bytes sa-token-doc/doc/more/link.md | 2 +- sa-token-doc/doc/more/update-log.md | 11 +- sa-token-doc/doc/start/download.md | 8 +- sa-token-doc/doc/start/example.md | 2 +- sa-token-doc/doc/use/at-check.md | 4 +- sa-token-doc/doc/use/config.md | 42 +-- sa-token-doc/doc/use/dao-extend.md | 2 +- sa-token-doc/doc/use/jur-auth.md | 2 +- sa-token-doc/doc/use/kick.md | 6 +- sa-token-doc/doc/use/login-auth.md | 14 +- sa-token-doc/doc/use/many-account.md | 8 +- sa-token-doc/doc/use/mock-person.md | 20 +- sa-token-doc/doc/use/not-cookie.md | 24 +- sa-token-doc/doc/use/session.md | 18 +- sa-token-doc/index.html | 4 +- 51 files changed, 624 insertions(+), 500 deletions(-) delete mode 100644 sa-token-dev/src/main/java/cn/dev33/satoken/SaTokenUtil.java create mode 100644 sa-token-dev/src/main/java/cn/dev33/satoken/util/SaTokenInsideUtil.java rename sa-token-dev/src/main/java/cn/dev33/satoken/util/{SpringMVCUtil.java => SpringMvcUtil.java} (97%) delete mode 100644 sa-token-dev/src/main/java/com/pj/SaTokenApplication.java delete mode 100644 sa-token-dev/src/main/resources/application.yml create mode 100644 sa-token-doc/doc/logo-150.png diff --git a/README.md b/README.md index eda6ddc5..3837eae7 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,23 @@ -# sa-token +
+ +
* (stp = sa-token-permission 的缩写 ) - * + * @author kong */ public class StpLogic { + /** + * 持久化的key前缀,多账号体系时以此值区分,比如:login、user、admin + */ + public String loginKey = ""; - public String login_key = ""; // 持久化的key前缀,多账号体系时以此值区分,比如:login、user、admin - - public StpLogic(String login_key) { - this.login_key = login_key; + /** + * 初始化StpLogic, 并制定loginKey + * @param loginKey . + */ + public StpLogic(String loginKey) { + this.loginKey = loginKey; } + // =================== 获取token 相关 =================== @@ -50,51 +57,49 @@ public class StpLogic { */ public String getTokenValue(){ // 0、获取相应对象 - HttpServletRequest request = SpringMVCUtil.getRequest(); + HttpServletRequest request = SpringMvcUtil.getRequest(); SaTokenConfig config = SaTokenManager.getConfig(); - String key_tokenName = getKey_tokenName(); + String keyTokenName = getKeyTokenName(); // 1、尝试从request里读取 - if(request.getAttribute(SaTokenUtil.JUST_CREATED_SAVE_KEY) != null) { - return String.valueOf(request.getAttribute(SaTokenUtil.JUST_CREATED_SAVE_KEY)); + if(request.getAttribute(SaTokenInsideUtil.JUST_CREATED_SAVE_KEY) != null) { + return String.valueOf(request.getAttribute(SaTokenInsideUtil.JUST_CREATED_SAVE_KEY)); } - - // 2、尝试从cookie里读取 - Cookie cookie = SaCookieUtil.getCookie(request, key_tokenName); - if(cookie != null){ - String tokenValue = cookie.getValue(); + // 2、尝试从请求体里面读取 + if(config.getIsReadBody() == true){ + String tokenValue = request.getParameter(keyTokenName); if(tokenValue != null) { return tokenValue; } } - // 3、尝试从header力读取 if(config.getIsReadHead() == true){ - String tokenValue = request.getHeader(key_tokenName); + String tokenValue = request.getHeader(keyTokenName); if(tokenValue != null) { return tokenValue; } } - - // 4、尝试从请求体里面读取 - if(config.getIsReadBody() == true){ - String tokenValue = request.getParameter(key_tokenName); - if(tokenValue != null) { - return tokenValue; + // 4、尝试从cookie里读取 + if(config.getIsReadCookie() == true){ + Cookie cookie = SaCookieUtil.getCookie(request, keyTokenName); + if(cookie != null){ + String tokenValue = cookie.getValue(); + if(tokenValue != null) { + return tokenValue; + } } } - // 5、都读取不到,那算了吧还是 return null; } /** * 获取指定id的tokenValue - * @param login_id + * @param loginId . * @return */ - public String getTokenValueByLoginId(Object login_id) { - return SaTokenManager.getDao().getValue(getKey_LoginId(login_id)); + public String getTokenValueByLoginId(Object loginId) { + return SaTokenManager.getDao().getValue(getKeyLoginId(loginId)); } /** @@ -103,7 +108,7 @@ public class StpLogic { */ public Map getTokenInfo() { Map map = new HashMap(); - map.put("tokenName", getKey_tokenName()); + map.put("tokenName", getKeyTokenName()); map.put("tokenValue", getTokenValue()); return map; } @@ -113,61 +118,66 @@ public class StpLogic { /** * 在当前会话上登录id - * @param login_id 登录id ,建议的类型:(long | int | String) + * @param loginId 登录id ,建议的类型:(long | int | String) */ - public void setLoginId(Object login_id) { + public void setLoginId(Object loginId) { // 1、获取相应对象 - HttpServletRequest request = SpringMVCUtil.getRequest(); + HttpServletRequest request = SpringMvcUtil.getRequest(); SaTokenConfig config = SaTokenManager.getConfig(); SaTokenDao dao = SaTokenManager.getDao(); // 2、获取tokenValue - String tokenValue = getTokenValueByLoginId(login_id); // 获取旧tokenValue + String tokenValue = getTokenValueByLoginId(loginId); // 获取旧tokenValue if(tokenValue == null){ // 为null则创建一个新的 tokenValue = randomTokenValue(); } else { // 不为null, 并且配置不共享,则删掉原来,并且创建新的 if(config.getIsShare() == false){ - dao.delKey(getKey_TokenValue(tokenValue)); + dao.delKey(getKeyTokenValue(tokenValue)); tokenValue = randomTokenValue(); } } // 3、持久化 - dao.setValue(getKey_TokenValue(tokenValue), String.valueOf(login_id), config.getTimeout()); // token -> uid - dao.setValue(getKey_LoginId(login_id), tokenValue, config.getTimeout()); // uid -> token - request.setAttribute(SaTokenUtil.JUST_CREATED_SAVE_KEY, tokenValue); // 保存到本次request里 - SaCookieUtil.addCookie(SpringMVCUtil.getResponse(), getKey_tokenName(), tokenValue, "/", (int)config.getTimeout()); // cookie注入 + dao.setValue(getKeyTokenValue(tokenValue), String.valueOf(loginId), config.getTimeout()); // token -> uid + dao.setValue(getKeyLoginId(loginId), tokenValue, config.getTimeout()); // uid -> token + request.setAttribute(SaTokenInsideUtil.JUST_CREATED_SAVE_KEY, tokenValue); // 保存到本次request里 + if(config.getIsReadCookie() == true){ + SaCookieUtil.addCookie(SpringMvcUtil.getResponse(), getKeyTokenName(), tokenValue, "/", (int)config.getTimeout()); // cookie注入 + } } /** * 当前会话注销登录 */ public void logout() { - Object login_id = getLoginId_defaultNull(); - if(login_id != null) { - logoutByLoginId(login_id); - SaCookieUtil.delCookie(SpringMVCUtil.getRequest(), SpringMVCUtil.getResponse(), getKey_tokenName()); // 清除cookie + Object loginId = getLoginIdDefaultNull(); + if(loginId != null) { + logoutByLoginId(loginId); + // 清除cookie + if(SaTokenManager.getConfig().getIsReadCookie() == true){ + SaCookieUtil.delCookie(SpringMvcUtil.getRequest(), SpringMvcUtil.getResponse(), getKeyTokenName()); + } } } /** - * 指定login_id的会话注销登录(踢人下线) - * @param login_id 账号id + * 指定loginId的会话注销登录(踢人下线) + * @param loginId 账号id */ - public void logoutByLoginId(Object login_id) { + public void logoutByLoginId(Object loginId) { // 获取相应tokenValue - String tokenValue = getTokenValueByLoginId(login_id); + String tokenValue = getTokenValueByLoginId(loginId); if(tokenValue == null) { return; } // 清除相关数据 - SaTokenManager.getDao().delKey(getKey_TokenValue(tokenValue)); // 清除token-id键值对 - SaTokenManager.getDao().delKey(getKey_LoginId(login_id)); // 清除id-token键值对 - SaTokenManager.getDao().delKey(getKey_session(login_id)); // 清除其session + SaTokenManager.getDao().delKey(getKeyTokenValue(tokenValue)); // 清除token-id键值对 + SaTokenManager.getDao().delKey(getKeyLoginId(loginId)); // 清除id-token键值对 + SaTokenManager.getDao().delKey(getKeySession(loginId)); // 清除其session // SaCookieUtil.delCookie(SpringMVCUtil.getRequest(), SpringMVCUtil.getResponse(), getKey_tokenName()); // 清除cookie } @@ -178,7 +188,7 @@ public class StpLogic { * @return 是否已登录 */ public boolean isLogin() { - return getLoginId_defaultNull() != null; + return getLoginIdDefaultNull() != null; } /** @@ -190,49 +200,49 @@ public class StpLogic { /** * 获取当前会话登录id, 如果未登录,则抛出异常 - * @return + * @return . */ public Object getLoginId() { - Object login_id = getLoginId_defaultNull(); - if(login_id == null) { - throw new NotLoginException(this.login_key); + Object loginId = getLoginIdDefaultNull(); + if(loginId == null) { + throw new NotLoginException(this.loginKey); } - return login_id; + return loginId; } /** * 获取当前会话登录id, 如果未登录,则返回默认值 - * @param default_value + * @param defaultValue . * @return */ @SuppressWarnings("unchecked") - public T getLoginId(T default_value) { - Object login_id = getLoginId_defaultNull(); - if(login_id == null) { - return default_value; + public T getLoginId(T defaultValue) { + Object loginId = getLoginIdDefaultNull(); + if(loginId == null) { + return defaultValue; } - if(default_value instanceof Integer) { - return (T)Integer.valueOf(login_id.toString()); + if(defaultValue instanceof Integer) { + return (T)Integer.valueOf(loginId.toString()); } - if(default_value instanceof Long) { - return (T)Long.valueOf(login_id.toString()); + if(defaultValue instanceof Long) { + return (T)Long.valueOf(loginId.toString()); } - if(default_value instanceof String) { - return (T)login_id.toString(); + if(defaultValue instanceof String) { + return (T)loginId.toString(); } - return (T)login_id; + return (T)loginId; } /** * 获取当前会话登录id, 如果未登录,则返回null * @return */ - public Object getLoginId_defaultNull() { + public Object getLoginIdDefaultNull() { String tokenValue = getTokenValue(); if(tokenValue != null) { - Object login_id = SaTokenManager.getDao().getValue(getKey_TokenValue(tokenValue)); - if(login_id != null) { - return login_id; + Object loginId = SaTokenManager.getDao().getValue(getKeyTokenValue(tokenValue)); + if(loginId != null) { + return loginId; } } return null; @@ -242,7 +252,7 @@ public class StpLogic { * 获取当前会话登录id, 并转换为String * @return */ - public String getLoginId_asString() { + public String getLoginIdAsString() { return String.valueOf(getLoginId()); } @@ -250,10 +260,10 @@ public class StpLogic { * 获取当前会话登录id, 并转换为int * @return */ - public int getLoginId_asInt() { - // Object login_id = getLoginId(); -// if(login_id instanceof Integer) { -// return (Integer)login_id; + public int getLoginIdAsInt() { + // Object loginId = getLoginId(); +// if(loginId instanceof Integer) { +// return (Integer)loginId; // } return Integer.valueOf(String.valueOf(getLoginId())); } @@ -262,23 +272,23 @@ public class StpLogic { * 获取当前会话登录id, 并转换为long * @return */ - public long getLoginId_asLong() { -// Object login_id = getLoginId(); -// if(login_id instanceof Long) { -// return (Long)login_id; + public long getLoginIdAsLong() { +// Object loginId = getLoginId(); +// if(loginId instanceof Long) { +// return (Long)loginId; // } return Long.valueOf(String.valueOf(getLoginId())); } /** * 获取指定token对应的登录id,如果未登录,则返回 null - * @return + * @return . */ public Object getLoginIdByToken(String tokenValue) { if(tokenValue != null) { - Object login_id = SaTokenManager.getDao().getValue(getKey_TokenValue(tokenValue)); - if(login_id != null) { - return login_id; + Object loginId = SaTokenManager.getDao().getValue(getKeyTokenValue(tokenValue)); + if(loginId != null) { + return loginId; } } return null; @@ -288,14 +298,14 @@ public class StpLogic { // =================== session相关 =================== /** - * 获取指定key的session, 如果没有,is_create=是否新建并返回 - * @param sessionId - * @param is_create - * @return + * 获取指定key的session, 如果没有,isCreate=是否新建并返回 + * @param sessionId . + * @param isCreate . + * @return . */ - protected SaSession getSessionBySessionId(String sessionId, boolean is_create) { + protected SaSession getSessionBySessionId(String sessionId, boolean isCreate) { SaSession session = SaTokenManager.getDao().getSaSession(sessionId); - if(session == null && is_create) { + if(session == null && isCreate) { session = new SaSession(sessionId); SaTokenManager.getDao().saveSaSession(session, SaTokenManager.getConfig().getTimeout()); } @@ -303,20 +313,30 @@ public class StpLogic { } /** - * 获取指定login_id的session - * @param login_id - * @return + * 获取指定loginId的session, 如果没有,isCreate=是否新建并返回 + * @param loginId 登录id + * @param isCreate 是否新建 + * @return SaSession */ - public SaSession getSessionByLoginId(Object login_id) { - return getSessionBySessionId(getKey_session(login_id), false); + public SaSession getSessionByLoginId(Object loginId, boolean isCreate) { + return getSessionBySessionId(getKeySession(loginId), isCreate); } + /** + * 获取指定loginId的session + * @param loginId . + * @return . + */ + public SaSession getSessionByLoginId(Object loginId) { + return getSessionByLoginId(getKeySession(loginId), false); + } + /** * 获取当前会话的session * @return */ public SaSession getSession() { - return getSessionBySessionId(getKey_session(getLoginId()), true); + return getSessionBySessionId(getKeySession(getLoginId()), true); } @@ -324,20 +344,20 @@ public class StpLogic { // =================== 权限验证操作 =================== /** - * 指定login_id是否含有指定权限 - * @param login_id - * @param pcode - * @return + * 指定loginId是否含有指定权限 + * @param loginId . + * @param pcode . + * @return . */ - public boolean hasPermission(Object login_id, Object pcode) { - List pcodeList = SaTokenManager.getStp().getPermissionCodeList(login_id, login_key); + public boolean hasPermission(Object loginId, Object pcode) { + List pcodeList = SaTokenManager.getStp().getPermissionCodeList(loginId, loginKey); return !(pcodeList == null || pcodeList.contains(pcode) == false); } /** * 当前会话是否含有指定权限 - * @param pcode - * @return + * @param pcode . + * @return . */ public boolean hasPermission(Object pcode) { return hasPermission(getLoginId(), pcode); @@ -345,42 +365,42 @@ public class StpLogic { /** * 当前账号是否含有指定权限 , 没有就抛出异常 - * @param pcode + * @param pcode . */ public void checkPermission(Object pcode) { if(hasPermission(pcode) == false) { - throw new NotPermissionException(pcode, this.login_key); + throw new NotPermissionException(pcode, this.loginKey); } } /** * 当前账号是否含有指定权限 , 【指定多个,必须全都有】 - * @param pcodeArray + * @param pcodeArray . */ public void checkPermissionAnd(Object... pcodeArray){ - Object login_id = getLoginId(); - List pcodeList = SaTokenManager.getStp().getPermissionCodeList(login_id, login_key); + Object loginId = getLoginId(); + List pcodeList = SaTokenManager.getStp().getPermissionCodeList(loginId, loginKey); for (Object pcode : pcodeArray) { if(pcodeList.contains(pcode) == false) { - throw new NotPermissionException(pcode, this.login_key); // 没有权限抛出异常 + throw new NotPermissionException(pcode, this.loginKey); // 没有权限抛出异常 } } } /** * 当前账号是否含有指定权限 , 【指定多个,有一个就可以了】 - * @param pcodeArray + * @param pcodeArray . */ public void checkPermissionOr(Object... pcodeArray){ - Object login_id = getLoginId(); - List pcodeList = SaTokenManager.getStp().getPermissionCodeList(login_id, login_key); + Object loginId = getLoginId(); + List pcodeList = SaTokenManager.getStp().getPermissionCodeList(loginId, loginKey); for (Object pcode : pcodeArray) { if(pcodeList.contains(pcode) == true) { return; // 有的话提前退出 } } if(pcodeArray.length > 0) { - throw new NotPermissionException(pcodeArray[0], this.login_key); // 没有权限抛出异常 + throw new NotPermissionException(pcodeArray[0], this.loginKey); // 没有权限抛出异常 } } @@ -391,32 +411,32 @@ public class StpLogic { * 获取key:客户端 tokenName * @return */ - public String getKey_tokenName() { + public String getKeyTokenName() { return SaTokenManager.getConfig().getTokenName(); } /** * 获取key: tokenValue 持久化 - * @param tokenValue + * @param tokenValue . * @return */ - public String getKey_TokenValue(String tokenValue) { - return SaTokenManager.getConfig().getTokenName() + ":" + login_key + ":token:" + tokenValue; + public String getKeyTokenValue(String tokenValue) { + return SaTokenManager.getConfig().getTokenName() + ":" + loginKey + ":token:" + tokenValue; } /** * 获取key: id 持久化 - * @param login_id + * @param loginId . * @return */ - public String getKey_LoginId(Object login_id) { - return SaTokenManager.getConfig().getTokenName() + ":" + login_key + ":id:" + login_id; + public String getKeyLoginId(Object loginId) { + return SaTokenManager.getConfig().getTokenName() + ":" + loginKey + ":id:" + loginId; } /** * 获取key: session 持久化 - * @param login_id - * @return + * @param loginId . + * @return . */ - public String getKey_session(Object login_id) { - return SaTokenManager.getConfig().getTokenName() + ":" + login_key + ":session:" + login_id; + public String getKeySession(Object loginId) { + return SaTokenManager.getConfig().getTokenName() + ":" + loginKey + ":session:" + loginId; } diff --git a/sa-token-dev/src/main/java/cn/dev33/satoken/stp/StpUtil.java b/sa-token-dev/src/main/java/cn/dev33/satoken/stp/StpUtil.java index c44d04ca..71a9864b 100644 --- a/sa-token-dev/src/main/java/cn/dev33/satoken/stp/StpUtil.java +++ b/sa-token-dev/src/main/java/cn/dev33/satoken/stp/StpUtil.java @@ -8,11 +8,14 @@ import cn.dev33.satoken.session.SaSession; /** * 一个默认的实现 + * @author kong */ @Service public class StpUtil { - // 底层的 StpLogic 对象 + /** + * 底层的 StpLogic 对象 + */ public static StpLogic stpLogic = new StpLogic("login"); @@ -29,11 +32,11 @@ public class StpUtil { /** * 获取指定id的tokenValue - * @param login_id + * @param loginId . * @return */ - public static String getTokenValueByLoginId(Object login_id) { - return stpLogic.getTokenValueByLoginId(login_id); + public static String getTokenValueByLoginId(Object loginId) { + return stpLogic.getTokenValueByLoginId(loginId); } /** @@ -48,10 +51,10 @@ public class StpUtil { /** * 在当前会话上登录id - * @param login_id 登录id ,建议的类型:(long | int | String) + * @param loginId 登录id ,建议的类型:(long | int | String) */ - public static void setLoginId(Object login_id) { - stpLogic.setLoginId(login_id); + public static void setLoginId(Object loginId) { + stpLogic.setLoginId(loginId); } /** @@ -62,11 +65,11 @@ public class StpUtil { } /** - * 指定login_id的会话注销登录(踢人下线) - * @param login_id 账号id + * 指定loginId的会话注销登录(踢人下线) + * @param loginId 账号id */ - public static void logoutByLoginId(Object login_id) { - stpLogic.logoutByLoginId(login_id); + public static void logoutByLoginId(Object loginId) { + stpLogic.logoutByLoginId(loginId); } // 查询相关 @@ -88,7 +91,7 @@ public class StpUtil { /** * 获取当前会话登录id, 如果未登录,则抛出异常 - * @return + * @return . */ public static Object getLoginId() { return stpLogic.getLoginId(); @@ -96,48 +99,48 @@ public class StpUtil { /** * 获取当前会话登录id, 如果未登录,则返回默认值 - * @param default_value - * @return + * @param defaultValue . + * @return . */ - public static T getLoginId(T default_value) { - return stpLogic.getLoginId(default_value); + public static T getLoginId(T defaultValue) { + return stpLogic.getLoginId(defaultValue); } /** * 获取当前会话登录id, 如果未登录,则返回null * @return */ - public static Object getLoginId_defaultNull() { - return stpLogic.getLoginId_defaultNull(); + public static Object getLoginIdDefaultNull() { + return stpLogic.getLoginIdDefaultNull(); } /** * 获取当前会话登录id, 并转换为String * @return */ - public static String getLoginId_asString() { - return stpLogic.getLoginId_asString(); + public static String getLoginIdAsString() { + return stpLogic.getLoginIdAsString(); } /** * 获取当前会话登录id, 并转换为int * @return */ - public static int getLoginId_asInt() { - return stpLogic.getLoginId_asInt(); + public static int getLoginIdAsInt() { + return stpLogic.getLoginIdAsInt(); } /** * 获取当前会话登录id, 并转换为long * @return */ - public static long getLoginId_asLong() { - return stpLogic.getLoginId_asLong(); + public static long getLoginIdAsLong() { + return stpLogic.getLoginIdAsLong(); } /** * 获取指定token对应的登录id,如果未登录,则返回 null - * @return + * @return . */ public static Object getLoginIdByToken(String tokenValue) { return stpLogic.getLoginIdByToken(tokenValue); @@ -146,14 +149,24 @@ public class StpUtil { // =================== session相关 =================== /** - * 获取指定login_id的session - * @param login_id - * @return + * 获取指定loginId的session, 如果没有,isCreate=是否新建并返回 + * @param loginId 登录id + * @param isCreate 是否新建 + * @return SaSession */ - public static SaSession getSessionByLoginId(Object login_id) { - return stpLogic.getSessionByLoginId(login_id); + public static SaSession getSessionByLoginId(Object loginId, boolean isCreate) { + return stpLogic.getSessionByLoginId(loginId, isCreate); } + /** + * 获取指定loginId的session + * @param loginId . + * @return . + */ + public static SaSession getSessionByLoginId(Object loginId) { + return stpLogic.getSessionByLoginId(loginId); + } + /** * 获取当前会话的session * @return @@ -165,19 +178,19 @@ public class StpUtil { // =================== 权限验证操作 =================== /** - * 指定login_id是否含有指定权限 - * @param login_id - * @param pcode - * @return + * 指定loginId是否含有指定权限 + * @param loginId . + * @param pcode . + * @return . */ - public static boolean hasPermission(Object login_id, Object pcode) { - return stpLogic.hasPermission(login_id, pcode); + public static boolean hasPermission(Object loginId, Object pcode) { + return stpLogic.hasPermission(loginId, pcode); } /** * 当前会话是否含有指定权限 - * @param pcode - * @return + * @param pcode . + * @return . */ public static boolean hasPermission(Object pcode) { return stpLogic.hasPermission(pcode); @@ -185,7 +198,7 @@ public class StpUtil { /** * 当前账号是否含有指定权限 , 没有就抛出异常 - * @param pcode + * @param pcode . */ public static void checkPermission(Object pcode) { stpLogic.checkPermission(pcode); @@ -193,7 +206,7 @@ public class StpUtil { /** * 当前账号是否含有指定权限 , 【指定多个,必须全都有】 - * @param pcodeArray + * @param pcodeArray . */ public static void checkPermissionAnd(Object... pcodeArray) { stpLogic.checkPermissionAnd(pcodeArray); @@ -201,7 +214,7 @@ public class StpUtil { /** * 当前账号是否含有指定权限 , 【指定多个,有一个就可以了】 - * @param pcodeArray + * @param pcodeArray . */ public static void checkPermissionOr(Object... pcodeArray) { stpLogic.checkPermissionOr(pcodeArray); diff --git a/sa-token-dev/src/main/java/cn/dev33/satoken/util/SaCookieUtil.java b/sa-token-dev/src/main/java/cn/dev33/satoken/util/SaCookieUtil.java index 267d6c37..ab850f24 100644 --- a/sa-token-dev/src/main/java/cn/dev33/satoken/util/SaCookieUtil.java +++ b/sa-token-dev/src/main/java/cn/dev33/satoken/util/SaCookieUtil.java @@ -14,10 +14,10 @@ public class SaCookieUtil { /** - * 获取指定cookie - * @param request - * @param cookieName - * @return + * 获取指定cookie . + * @param request . + * @param cookieName . + * @return . */ public static Cookie getCookie(HttpServletRequest request, String cookieName) { Cookie[] cookies = request.getCookies(); @@ -35,11 +35,11 @@ public class SaCookieUtil { /** * 添加cookie - * @param response - * @param name - * @param value - * @param path - * @param timeout + * @param response . + * @param name . + * @param value . + * @param path . + * @param timeout . */ public static void addCookie(HttpServletResponse response,String name,String value,String path,int timeout) { Cookie cookie = new Cookie(name, value); @@ -53,10 +53,10 @@ public class SaCookieUtil { /** - * 删除cookie - * @param request - * @param response - * @param name + * 删除cookie . + * @param request . + * @param response . + * @param name . */ public static void delCookie(HttpServletRequest request,HttpServletResponse response,String name) { Cookie[] cookies = request.getCookies(); @@ -73,10 +73,10 @@ public class SaCookieUtil { /** * 修改cookie的value值 - * @param request - * @param response - * @param name - * @param value + * @param request . + * @param response . + * @param name . + * @param value . */ public static void updateCookie(HttpServletRequest request,HttpServletResponse response,String name,String value) { Cookie[] cookies = request.getCookies(); diff --git a/sa-token-dev/src/main/java/cn/dev33/satoken/util/SaTokenInsideUtil.java b/sa-token-dev/src/main/java/cn/dev33/satoken/util/SaTokenInsideUtil.java new file mode 100644 index 00000000..0f9102af --- /dev/null +++ b/sa-token-dev/src/main/java/cn/dev33/satoken/util/SaTokenInsideUtil.java @@ -0,0 +1,40 @@ +package cn.dev33.satoken.util; + +/** + * sa-token 工具类 + * @author kong + * + */ +public class SaTokenInsideUtil { + + + /** + * sa-token 版本号 + */ + public static final String VERSION_NO = "v1.4.0"; + + /** + * sa-token 开源地址 + */ + public static final String GITHUB_URL= "https://github.com/click33/sa-token"; + + /** + * 打印 sa-token + */ + public static void printSaToken() { + String str = + "____ ____ ___ ____ _ _ ____ _ _ \r\n" + + "[__ |__| __ | | | |_/ |___ |\\ | \r\n" + + "___] | | | |__| | \\_ |___ | \\| \r\n" + + "sa-token:" + VERSION_NO + " \r\n" + + "GitHub:" + GITHUB_URL; // + "\r\n"; + System.out.println(str); + } + + /** + * 如果token为本次请求新创建的,则以此字符串为key存储在当前request中 JUST_CREATED_SAVE_KEY + */ + public static final String JUST_CREATED_SAVE_KEY = "JUST_CREATED_SAVE_KEY_"; + + +} diff --git a/sa-token-dev/src/main/java/cn/dev33/satoken/util/SpringMVCUtil.java b/sa-token-dev/src/main/java/cn/dev33/satoken/util/SpringMvcUtil.java similarity index 97% rename from sa-token-dev/src/main/java/cn/dev33/satoken/util/SpringMVCUtil.java rename to sa-token-dev/src/main/java/cn/dev33/satoken/util/SpringMvcUtil.java index ef82c581..d89e10d7 100644 --- a/sa-token-dev/src/main/java/cn/dev33/satoken/util/SpringMVCUtil.java +++ b/sa-token-dev/src/main/java/cn/dev33/satoken/util/SpringMvcUtil.java @@ -11,7 +11,7 @@ import org.springframework.web.context.request.ServletRequestAttributes; * @author kong * */ -public class SpringMVCUtil { +public class SpringMvcUtil { /** * 获取当前会话的 request @@ -37,4 +37,7 @@ public class SpringMVCUtil { return servletRequestAttributes.getResponse(); } + + + } diff --git a/sa-token-dev/src/main/java/com/pj/SaTokenApplication.java b/sa-token-dev/src/main/java/com/pj/SaTokenApplication.java deleted file mode 100644 index 472af75a..00000000 --- a/sa-token-dev/src/main/java/com/pj/SaTokenApplication.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.pj; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -import cn.dev33.satoken.SaTokenManager; -import cn.dev33.satoken.spring.SaTokenSetup; - -@SaTokenSetup // 标注启动 sa-token -@SpringBootApplication -public class SaTokenApplication { - - public static void main(String[] args) { - SpringApplication.run(SaTokenApplication.class, args); // run--> - System.out.println(SaTokenManager.getConfig()); - } - -} \ No newline at end of file diff --git a/sa-token-dev/src/main/resources/application.yml b/sa-token-dev/src/main/resources/application.yml deleted file mode 100644 index 835fdf29..00000000 --- a/sa-token-dev/src/main/resources/application.yml +++ /dev/null @@ -1,20 +0,0 @@ -# 端口 -server: - port: 8081 - -spring: - # sa-token配置 - sa-token: - # token名称(同时也是cookie名称) - token-name: satoken - # token有效期,单位s 默认30天 - timeout: 2592000 - # 在多人登录同一账号时,是否共享会话(为true时共用一个,为false时新登录挤掉旧登录) - is-share: true - # 是否在cookie读取不到token时,继续从请求header里继续尝试读取 - is-read-head: true - # 是否在header读取不到token时,继续从请求题参数里继续尝试读取 - is-read-body: true - # 是否在初始化配置时打印版本字符画 - is-v: true - \ No newline at end of file diff --git a/sa-token-doc/doc/README.md b/sa-token-doc/doc/README.md index eda6ddc5..3c8d3b25 100644 --- a/sa-token-doc/doc/README.md +++ b/sa-token-doc/doc/README.md @@ -1,12 +1,25 @@ -# sa-token + + + +sa-token v1.4.0 +一个JavaWeb权限认证框架,强大、简单、好用 + + + + + + + + + -一个JavaWeb权限认证框架,强大、简单、好用 -在线文档:[http://sa-token.dev33.cn/](http://sa-token.dev33.cn/) +--- + +## sa-token 😋 +- 在线文档:[http://sa-token.dev33.cn/](http://sa-token.dev33.cn/) +- 需求提交:我们深知一个优秀的项目需要海纳百川,[点我在线提交需求](http://sa-app.dev33.cn/wall.html?name=sa-token) - :kissing_closed_eyes: :kissing_closed_eyes: :kissing_closed_eyes: :yum: :yum: :yum: :innocent: :innocent: :innocent: :heart: :heart: :heart: - - -## 优点 +## 框架优点 与其它权限认证框架相比,sa-token尽力保证两点: - 上手简单:能自动化的配置全部自动化,不让你费脑子 - 功能强大:能涵盖的功能全部涵盖,不让你用个框架还要自己给框架打各种补丁 @@ -24,9 +37,6 @@ - 零配置与Spring等框架集成 - ... -## 需求提交 -- 我们深知一个优秀的项目需要海纳百川,[点我在线提交需求](http://sa-app.dev33.cn/wall.html?name=sa-token) - ## 贡献代码 1. 在github上fork一份到自己的仓库 2. clone自己的仓库到本地电脑 diff --git a/sa-token-doc/doc/index.html b/sa-token-doc/doc/index.html index cc7c42d8..085e2e38 100644 --- a/sa-token-doc/doc/index.html +++ b/sa-token-doc/doc/index.html @@ -28,7 +28,7 @@ 加载中...