提交 76031a77 编写于 作者: shengzhang_'s avatar shengzhang_

更新jar包引用方式

上级 618d085b
......@@ -25,14 +25,12 @@
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- sa-token 安全认证 -->
<dependency>
<groupId>cn.dev33.sa-token</groupId>
<artifactId>sa-token-spring</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/sa-token-spring-1.0.0.jar</systemPath>
</dependency>
<!-- sa-token权限验证 -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token</artifactId>
<version>1.0.0</version>
</dependency>
<!-- SpringBoot整合redis -->
<dependency>
......@@ -57,10 +55,6 @@
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.pj.SaTokenDemoApplication</mainClass>
</manifest>
<!-- jar清单添加此字符串 -->
<manifestEntries>
<Class-Path>lib/sa-token-spring-1.0.0.jar</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
......
......@@ -12,46 +12,97 @@ public class SaTokenConfig {
private Boolean isReadBody = true; // 是否在header读取不到token时,继续从请求题参数里继续尝试读取
private Boolean isV = true; // 是否在初始化配置时打印版本字符画
/**
* @return tokenName
*/
public String getTokenName() {
return tokenName;
}
/**
* @param tokenName 要设置的 tokenName
*/
public void setTokenName(String tokenName) {
this.tokenName = tokenName;
}
/**
* @return timeout
*/
public long getTimeout() {
return timeout;
}
/**
* @param timeout 要设置的 timeout
*/
public void setTimeout(long timeout) {
this.timeout = timeout;
}
/**
* @return isShare
*/
public Boolean getIsShare() {
return isShare;
}
/**
* @param isShare 要设置的 isShare
*/
public void setIsShare(Boolean isShare) {
this.isShare = isShare;
}
/**
* @return isReadHead
*/
public Boolean getIsReadHead() {
return isReadHead;
}
/**
* @param isReadHead 要设置的 isReadHead
*/
public void setIsReadHead(Boolean isReadHead) {
this.isReadHead = isReadHead;
}
/**
* @return isReadBody
*/
public Boolean getIsReadBody() {
return isReadBody;
}
/**
* @param isReadBody 要设置的 isReadBody
*/
public void setIsReadBody(Boolean isReadBody) {
this.isReadBody = isReadBody;
}
/**
* @return isV
*/
public Boolean getIsV() {
return isV;
}
/**
* @param isV 要设置的 isV
*/
public void setIsV(Boolean isV) {
this.isV = isV;
}
/* (非 Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "SaTokenConfig [tokenName=" + tokenName + ", timeout=" + timeout + ", isShare=" + isShare
......@@ -62,4 +113,5 @@ public class SaTokenConfig {
}
......@@ -62,7 +62,7 @@ public class SaTokenConfigFactory {
private static Object initPropByMap(Map<String, String> map, Object obj){
if(map == null){
map = new HashMap<>();
map = new HashMap<String, String>();
}
// 1、取出类型
......@@ -84,7 +84,9 @@ public class SaTokenConfigFactory {
Object valueConvert = getObjectByClass(value, field.getType()); // 转换值类型
field.setAccessible(true);
field.set(obj, valueConvert);
} catch (IllegalArgumentException | IllegalAccessException e) {
} catch (IllegalArgumentException e) {
throw new RuntimeException("属性赋值出错:" + field.getName(), e);
} catch (IllegalAccessException e) {
throw new RuntimeException("属性赋值出错:" + field.getName(), e);
}
}
......
......@@ -33,27 +33,27 @@ public interface SaTokenDao {
/**
* 根据指定key的session,如果没有,则返回空
* @param key 键名称
* @param sessionId 键名称
* @return
*/
public SaSession getSaSession(String sessionId);
/**
* 将指定session持久化
* @param key 键名称
* @param value 值
* @param session 要保存的session对象
* @param timeout 过期时间,单位: s
*/
public void saveSaSession(SaSession session, long timeout);
/**
* 更新指定session
* 更新指定session
* @param session 要更新的session对象
*/
public void updateSaSession(SaSession session);
/**
* 删除一个指定的session
* @param key 键名称
* @param sessionId sessionId
*/
public void delSaSession(String sessionId);
......
......@@ -10,9 +10,7 @@ import cn.dev33.satoken.session.SaSession;
*/
public class SaTokenDaoDefault implements SaTokenDao {
/**
* 所有数据集合
*/
// 所有数据集合
Map<String, Object> dataMap = new HashMap<String, Object>();
......
......@@ -41,14 +41,17 @@ public class SaSession implements Serializable {
}
/**
* 当前会话创建时间
* 返回当前会话创建时间
* @return 时间戳
*/
public long getCreateTime() {
return createTime;
}
/**
* 写入值
* 写入一个值
* @param key 名称
* @param value 值
*/
public void setAttribute(String key, Object value) {
dataMap.put(key, value);
......@@ -56,14 +59,19 @@ public class SaSession implements Serializable {
}
/**
* 取值
* 取出一个值
* @param key 名称
* @return 值
*/
public Object getAttribute(String key) {
return dataMap.get(key);
}
/**
* 取值,并指定取不到值时的默认值
* 取值,并指定取不到值时的默认值
* @param key 名称
* @param default_value 取不到值的时候返回的默认值
* @return
*/
public Object getAttribute(String key, Object default_value) {
Object value = getAttribute(key);
......@@ -75,7 +83,8 @@ public class SaSession implements Serializable {
/**
* 移除一个key
* 移除一个值
* @param key 要移除的值的名字
*/
public void removeAttribute(String key) {
dataMap.remove(key);
......@@ -83,7 +92,7 @@ public class SaSession implements Serializable {
}
/**
* 清空所有key
* 清空所有
*/
public void clearAttribute() {
dataMap.clear();
......@@ -91,14 +100,17 @@ public class SaSession implements Serializable {
}
/**
* 是否含有指定key
* 是否含有指定key
* @param key 是否含有指定值
* @return 是否含有
*/
public boolean containsAttribute(String key) {
return dataMap.keySet().contains(key);
}
/**
* 当前session会话所有key
* 返回当前session会话所有key
* @return 所有值的key列表
*/
public Set<String> getAttributeKeys() {
return dataMap.keySet();
......@@ -106,6 +118,7 @@ public class SaSession implements Serializable {
/**
* 获取数据集合(如果更新map里的值,请调用session.update()方法避免数据过时 )
* @return 返回底层储存值的map对象
*/
public Map<String, Object> getDataMap() {
return dataMap;
......
......@@ -15,12 +15,21 @@ public class SaSessionCustomUtil {
return SaTokenManager.getConfig().getTokenName() + ":" + session_key + ":session:" + sessionId;
}
/** 指定key的session是否存在 */
/**
* 指定key的session是否存在
* @param sessionId session的id
* @return 是否存在
*/
public boolean isExists(String sessionId) {
return SaTokenManager.getDao().getSaSession(getSessionKey(sessionId)) != null;
}
/** 获取指定key的session, 如果没有,is_create=是否新建并返回 */
/**
* 获取指定key的session
* @param sessionId key
* @param is_create 如果没有,是否新建并返回
* @return
*/
public static SaSession getSessionById(String sessionId, boolean is_create) {
SaSession session = SaTokenManager.getDao().getSaSession(getSessionKey(sessionId));
if(session == null && is_create) {
......@@ -29,12 +38,19 @@ public class SaSessionCustomUtil {
}
return session;
}
/** 获取指定key的session, 如果没有则新建并返回 */
/**
* 获取指定key的session, 如果没有则新建并返回
* @param sessionId key
* @return session对象
*/
public static SaSession getSessionById(String sessionId) {
return getSessionById(sessionId, true);
}
/** 删除指定key的session */
/**
* 删除指定key的session
* @param sessionId 删除指定key
*/
public static void delSessionById(String sessionId) {
SaTokenManager.getDao().delSaSession(getSessionKey(sessionId));
}
......
......@@ -7,7 +7,12 @@ import java.util.List;
*/
public interface StpInterface {
/** 返回指定login_id所拥有的权限码集合 */
/**
* 返回指定login_id所拥有的权限码集合
* @param login_id 账号id
* @param login_key 具体的stp标识
* @return
*/
public List<Object> getPermissionCodeList(Object login_id, String login_key);
......
......@@ -36,12 +36,18 @@ public class StpLogic {
// =================== 获取token 相关 ===================
/** 随机生成一个tokenValue */
/**
* 随机生成一个tokenValue
* @return 生成的tokenValue
*/
public String randomTokenValue() {
return UUID.randomUUID().toString();
}
/** 获取当前tokenValue */
/**
* 获取当前tokenValue
* @return 当前tokenValue
*/
public String getTokenValue(){
// 0、获取相应对象
HttpServletRequest request = SpringMVCUtil.getRequest();
......@@ -82,12 +88,19 @@ public class StpLogic {
return null;
}
/** 获取指定id的tokenValue */
/**
* 获取指定id的tokenValue
* @param login_id
* @return
*/
public String getTokenValueByLoginId(Object login_id) {
return SaTokenManager.getDao().getValue(getKey_LoginId(login_id));
}
/** 获取当前会话的token信息:tokenName与tokenValue */
/**
* 获取当前会话的token信息:tokenName与tokenValue
* @return 一个Map对象
*/
public Map<String, String> getTokenInfo() {
Map<String, String> map = new HashMap<String, String>();
map.put("tokenName", getKey_tokenName());
......@@ -98,7 +111,10 @@ public class StpLogic {
// =================== 登录相关操作 ===================
/** 在当前会话上登录id ,建议的类型:(long | int | String) */
/**
* 在当前会话上登录id
* @param login_id 登录id ,建议的类型:(long | int | String)
*/
public void setLoginId(Object login_id) {
// 1、获取相应对象
......@@ -125,7 +141,9 @@ public class StpLogic {
SaCookieUtil.addCookie(SpringMVCUtil.getResponse(), getKey_tokenName(), tokenValue, "/", (int)config.getTimeout()); // cookie注入
}
/** 当前会话注销登录 */
/**
* 当前会话注销登录
*/
public void logout() {
Object login_id = getLoginId_defaultNull();
if(login_id != null) {
......@@ -134,7 +152,10 @@ public class StpLogic {
}
}
/** 指定login_id的会话注销登录(踢人下线) */
/**
* 指定login_id的会话注销登录(踢人下线)
* @param login_id 账号id
*/
public void logoutByLoginId(Object login_id) {
// 获取相应tokenValue
......@@ -152,12 +173,18 @@ public class StpLogic {
// 查询相关
/** 获取当前会话是否已经登录 */
/**
* 获取当前会话是否已经登录
* @return 是否已登录
*/
public boolean isLogin() {
return getLoginId_defaultNull() != null;
}
/** 获取当前会话登录id, 如果未登录,则抛出异常 */
/**
* 获取当前会话登录id, 如果未登录,则抛出异常
* @return
*/
public Object getLoginId() {
Object login_id = getLoginId_defaultNull();
if(login_id == null) {
......@@ -166,7 +193,11 @@ public class StpLogic {
return login_id;
}
/** 获取当前会话登录id, 如果未登录,则返回默认值 */
/**
* 获取当前会话登录id, 如果未登录,则返回默认值
* @param default_value
* @return
*/
@SuppressWarnings("unchecked")
public <T>T getLoginId(T default_value) {
Object login_id = getLoginId_defaultNull();
......@@ -176,7 +207,10 @@ public class StpLogic {
return (T)login_id;
}
/** 获取当前会话登录id, 如果未登录,则返回null */
/**
* 获取当前会话登录id, 如果未登录,则返回null
* @return
*/
public Object getLoginId_defaultNull() {
String tokenValue = getTokenValue();
if(tokenValue != null) {
......@@ -188,12 +222,18 @@ public class StpLogic {
return null;
}
/** 获取当前会话登录id, 并转换为String */
/**
* 获取当前会话登录id, 并转换为String
* @return
*/
public String getLoginId_asString() {
return String.valueOf(getLoginId());
}
/** 获取当前会话登录id, 并转换为int */
/**
* 获取当前会话登录id, 并转换为int
* @return
*/
public int getLoginId_asInt() {
// Object login_id = getLoginId();
// if(login_id instanceof Integer) {
......@@ -202,7 +242,10 @@ public class StpLogic {
return Integer.valueOf(String.valueOf(getLoginId()));
}
/** 获取当前会话登录id, 并转换为long */
/**
* 获取当前会话登录id, 并转换为long
* @return
*/
public long getLoginId_asLong() {
// Object login_id = getLoginId();
// if(login_id instanceof Long) {
......@@ -215,7 +258,12 @@ public class StpLogic {
// =================== session相关 ===================
/** 获取指定key的session, 如果没有,is_create=是否新建并返回 */
/**
* 获取指定key的session, 如果没有,is_create=是否新建并返回
* @param sessionId
* @param is_create
* @return
*/
protected SaSession getSessionBySessionId(String sessionId, boolean is_create) {
SaSession session = SaTokenManager.getDao().getSaSession(sessionId);
if(session == null && is_create) {
......@@ -225,12 +273,19 @@ public class StpLogic {
return session;
}
/** 获取指定login_id的session */
/**
* 获取指定login_id的session
* @param login_id
* @return
*/
public SaSession getSessionByLoginId(Object login_id) {
return getSessionBySessionId(getKey_session(login_id), false);
}
/** 获取当前会话的session */
/**
* 获取当前会话的session
* @return
*/
public SaSession getSession() {
return getSessionBySessionId(getKey_session(getLoginId()), true);
}
......@@ -239,25 +294,40 @@ public class StpLogic {
// =================== 权限验证操作 ===================
/** 指定login_id是否含有指定权限 */
/**
* 指定login_id是否含有指定权限
* @param login_id
* @param pcode
* @return
*/
public boolean hasPermission(Object login_id, Object pcode) {
List<Object> pcodeList = SaTokenManager.getStp().getPermissionCodeList(login_id, login_key);
return !(pcodeList == null || pcodeList.contains(pcode) == false);
}
/** 当前会话是否含有指定权限 */
/**
* 当前会话是否含有指定权限
* @param pcode
* @return
*/
public boolean hasPermission(Object pcode) {
return hasPermission(getLoginId(), pcode);
}
/** 当前账号是否含有指定权限 , 没有就抛出异常 */
/**
* 当前账号是否含有指定权限 , 没有就抛出异常
* @param pcode
*/
public void checkPermission(Object pcode) {
if(hasPermission(pcode) == false) {
throw new NotPermissionException(pcode);
}
}
/** 当前账号是否含有指定权限 , 【指定多个,必须全都有】 */
/**
* 当前账号是否含有指定权限 , 【指定多个,必须全都有】
* @param pcodeArray
*/
public void checkPermissionAnd(Object... pcodeArray){
Object login_id = getLoginId();
List<Object> pcodeList = SaTokenManager.getStp().getPermissionCodeList(login_id, login_key);
......@@ -268,7 +338,10 @@ public class StpLogic {
}
}
/** 当前账号是否含有指定权限 , 【指定多个,有一个就可以了】 */
/**
* 当前账号是否含有指定权限 , 【指定多个,有一个就可以了】
* @param pcodeArray
*/
public void checkPermissionOr(Object... pcodeArray){
Object login_id = getLoginId();
List<Object> pcodeList = SaTokenManager.getStp().getPermissionCodeList(login_id, login_key);
......@@ -285,19 +358,34 @@ public class StpLogic {
// =================== 返回相应key ===================
/** 获取key:客户端 tokenName */
/**
* 获取key:客户端 tokenName
* @return
*/
public String getKey_tokenName() {
return SaTokenManager.getConfig().getTokenName();
}
/** 获取key: tokenValue 持久化 */
/**
* 获取key: tokenValue 持久化
* @param tokenValue
* @return
*/
public String getKey_TokenValue(String tokenValue) {
return SaTokenManager.getConfig().getTokenName() + ":" + login_key + ":token:" + tokenValue;
}
/** 获取key: id 持久化 */
/**
* 获取key: id 持久化
* @param login_id
* @return
*/
public String getKey_LoginId(Object login_id) {
return SaTokenManager.getConfig().getTokenName() + ":" + login_key + ":id:" + login_id;
}
/** 获取key: session 持久化 */
/**
* 获取key: session 持久化
* @param login_id
* @return
*/
public String getKey_session(Object login_id) {
return SaTokenManager.getConfig().getTokenName() + ":" + login_key + ":session:" + login_id;
}
......
......@@ -19,110 +19,175 @@ public class StpUtil {
// =================== 获取token 相关 ===================
/** 获取当前tokenValue */
/**
* 获取当前tokenValue
* @return 当前tokenValue
*/
public static String getTokenValue() {
return stpLogic.getTokenValue();
}
/** 获取指定id的tokenValue */
/**
* 获取指定id的tokenValue
* @param login_id
* @return
*/
public static String getTokenValueByLoginId(Object login_id) {
return stpLogic.getTokenValueByLoginId(login_id);
}
/** 获取当前会话的token信息:tokenName与tokenValue */
/**
* 获取当前会话的token信息:tokenName与tokenValue
* @return 一个Map对象
*/
public static Map<String, String> getTokenInfo() {
return stpLogic.getTokenInfo();
}
// =================== 登录相关操作 ===================
/** 在当前会话上设置登录id,建议的类型:(long | int | String) */
/**
* 在当前会话上登录id
* @param login_id 登录id ,建议的类型:(long | int | String)
*/
public static void setLoginId(Object login_id) {
stpLogic.setLoginId(login_id);
}
/** 当前会话注销登录 */
/**
* 当前会话注销登录
*/
public static void logout() {
stpLogic.logout();
}
/** 指定login_id的会话注销登录(踢人下线) */
/**
* 指定login_id的会话注销登录(踢人下线)
* @param login_id 账号id
*/
public static void logoutByLoginId(Object login_id) {
stpLogic.logoutByLoginId(login_id);
}
// 查询相关
/** 获取当前会话是否已经登录 */
/**
* 获取当前会话是否已经登录
* @return 是否已登录
*/
public static boolean isLogin() {
return stpLogic.isLogin();
}
/** 获取当前会话登录id, 如果未登录,则抛出异常 */
/**
* 获取当前会话登录id, 如果未登录,则抛出异常
* @return
*/
public static Object getLoginId() {
return stpLogic.getLoginId();
}
/** 获取当前会话登录id, 如果未登录,则返回默认值 */
/**
* 获取当前会话登录id, 如果未登录,则返回默认值
* @param default_value
* @return
*/
public static <T> T getLoginId(T default_value) {
return stpLogic.getLoginId(default_value);
}
/** 获取当前会话登录id, 如果未登录,则返回null */
/**
* 获取当前会话登录id, 如果未登录,则返回null
* @return
*/
public static Object getLoginId_defaultNull() {
return stpLogic.getLoginId_defaultNull();
}
/** 获取当前会话登录id, 并转换为String */
/**
* 获取当前会话登录id, 并转换为String
* @return
*/
public static String getLoginId_asString() {
return stpLogic.getLoginId_asString();
}
/** 获取当前会话登录id, 并转换为int */
/**
* 获取当前会话登录id, 并转换为int
* @return
*/
public static int getLoginId_asInt() {
return stpLogic.getLoginId_asInt();
}
/** 获取当前会话登录id, 并转换为long */
/**
* 获取当前会话登录id, 并转换为long
* @return
*/
public static long getLoginId_asLong() {
return stpLogic.getLoginId_asLong();
}
// =================== session相关 ===================
/** 获取指定login_id的session */
/**
* 获取指定login_id的session
* @param login_id
* @return
*/
public static SaSession getSessionByLoginId(Object login_id) {
return stpLogic.getSessionByLoginId(login_id);
}
/** 获取当前会话的session */
/**
* 获取当前会话的session
* @return
*/
public static SaSession getSession() {
return stpLogic.getSession();
}
// =================== 权限验证操作 ===================
/** 指定login_id是否含有指定权限 */
/**
* 指定login_id是否含有指定权限
* @param login_id
* @param pcode
* @return
*/
public static boolean hasPermission(Object login_id, Object pcode) {
return stpLogic.hasPermission(login_id, pcode);
}
/** 当前会话是否含有指定权限 */
/**
* 当前会话是否含有指定权限
* @param pcode
* @return
*/
public static boolean hasPermission(Object pcode) {
return stpLogic.hasPermission(pcode);
}
/** 当前账号是否含有指定权限 , 没有就抛出异常 */
/**
* 当前账号是否含有指定权限 , 没有就抛出异常
* @param pcode
*/
public static void checkPermission(Object pcode) {
stpLogic.checkPermission(pcode);
}
/** 当前账号是否含有指定权限 , 【指定多个,必须全都有】 */
/**
* 当前账号是否含有指定权限 , 【指定多个,必须全都有】
* @param pcodeArray
*/
public static void checkPermissionAnd(Object... pcodeArray) {
stpLogic.checkPermissionAnd(pcodeArray);
}
/** 当前账号是否含有指定权限 , 【指定多个,有一个就可以了】 */
/**
* 当前账号是否含有指定权限 , 【指定多个,有一个就可以了】
* @param pcodeArray
*/
public static void checkPermissionOr(Object... pcodeArray) {
stpLogic.checkPermissionOr(pcodeArray);
}
......
......@@ -15,6 +15,9 @@ public class SaCookieUtil {
/**
* 获取指定cookie
* @param request
* @param cookieName
* @return
*/
public static Cookie getCookie(HttpServletRequest request, String cookieName) {
Cookie[] cookies = request.getCookies();
......@@ -32,6 +35,11 @@ public class SaCookieUtil {
/**
* 添加cookie
* @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);
......@@ -46,6 +54,9 @@ public class SaCookieUtil {
/**
* 删除cookie
* @param request
* @param response
* @param name
*/
public static void delCookie(HttpServletRequest request,HttpServletResponse response,String name) {
Cookie[] cookies = request.getCookies();
......@@ -62,6 +73,10 @@ public class SaCookieUtil {
/**
* 修改cookie的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();
......
......@@ -13,7 +13,10 @@ import org.springframework.web.context.request.ServletRequestAttributes;
*/
public class SpringMVCUtil {
// 获取当前会话的 request
/**
* 获取当前会话的 request
* @return
*/
public static HttpServletRequest getRequest() {
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();// 大善人SpringMVC提供的封装
if(servletRequestAttributes == null) {
......@@ -22,7 +25,10 @@ public class SpringMVCUtil {
return servletRequestAttributes.getRequest();
}
// 获取当前会话的
/**
* 获取当前会话的 response
* @return
*/
public static HttpServletResponse getResponse() {
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();// 大善人SpringMVC提供的封装
if(servletRequestAttributes == null) {
......
......@@ -2,7 +2,6 @@
------
## 源码
你可以通过`github`或者`gitee`来获取源码
- github地址:[https://github.com/click33/sa-token](https://github.com/click33/sa-token)
......@@ -14,9 +13,20 @@
- sa-token-doc: 文档介绍
## jar包下载
[点击下载](https://color-test.oss-cn-qingdao.aliyuncs.com/sa-token/sa-token-spring-1.0.0.jar)
## jar包下载
[点击下载:sa-token-1.0.0.jar](https://color-test.oss-cn-qingdao.aliyuncs.com/sa-token/sa-token-1.0.0.jar)
## maven依赖
``` xml
<!-- sa-token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token</artifactId>
<version>1.0.0</version>
</dependency>
```
......
......@@ -11,18 +11,15 @@
在IDE中新建一个Springboot项目,例如:`sa-token-demo-springboot`(不会的同学请自行百度或者参考github示例)
#### 2、设置jar包依赖
- 在项目根目录新建文件夹`lib`,将 `sa-token-spring-xxx.jar` 复制到其中
- 并在 `pom.xml` 中添加依赖:
-`pom.xml` 中添加依赖:
``` xml
<!-- sa-token 安全认证 -->
<dependency>
<groupId>cn.dev33.sa-token</groupId>
<artifactId>sa-token-spring</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/sa-token-spring-1.0.0.jar</systemPath>
</dependency>
<!-- sa-token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token</artifactId>
<version>1.0.0</version>
</dependency>
```
#### 3、配置文件
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册