更新jar包引用方式

This commit is contained in:
2020-02-08 00:54:38 +08:00
parent 618d085b9a
commit 76031a77a0
15 changed files with 359 additions and 98 deletions

View File

@ -25,14 +25,12 @@
<artifactId>spring-boot-starter-aop</artifactId> <artifactId>spring-boot-starter-aop</artifactId>
</dependency> </dependency>
<!-- sa-token 安全认证 --> <!-- sa-token权限验证 -->
<dependency> <dependency>
<groupId>cn.dev33.sa-token</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-spring</artifactId> <artifactId>sa-token</artifactId>
<version>1.0.0</version> <version>1.0.0</version>
<scope>system</scope> </dependency>
<systemPath>${project.basedir}/lib/sa-token-spring-1.0.0.jar</systemPath>
</dependency>
<!-- SpringBoot整合redis --> <!-- SpringBoot整合redis -->
<dependency> <dependency>
@ -57,10 +55,6 @@
<classpathPrefix>lib/</classpathPrefix> <classpathPrefix>lib/</classpathPrefix>
<mainClass>com.pj.SaTokenDemoApplication</mainClass> <mainClass>com.pj.SaTokenDemoApplication</mainClass>
</manifest> </manifest>
<!-- jar清单添加此字符串 -->
<manifestEntries>
<Class-Path>lib/sa-token-spring-1.0.0.jar</Class-Path>
</manifestEntries>
</archive> </archive>
</configuration> </configuration>
</plugin> </plugin>

View File

@ -12,46 +12,97 @@ public class SaTokenConfig {
private Boolean isReadBody = true; // 是否在header读取不到token时继续从请求题参数里继续尝试读取 private Boolean isReadBody = true; // 是否在header读取不到token时继续从请求题参数里继续尝试读取
private Boolean isV = true; // 是否在初始化配置时打印版本字符画 private Boolean isV = true; // 是否在初始化配置时打印版本字符画
/**
* @return tokenName
*/
public String getTokenName() { public String getTokenName() {
return tokenName; return tokenName;
} }
/**
* @param tokenName 要设置的 tokenName
*/
public void setTokenName(String tokenName) { public void setTokenName(String tokenName) {
this.tokenName = tokenName; this.tokenName = tokenName;
} }
/**
* @return timeout
*/
public long getTimeout() { public long getTimeout() {
return timeout; return timeout;
} }
/**
* @param timeout 要设置的 timeout
*/
public void setTimeout(long timeout) { public void setTimeout(long timeout) {
this.timeout = timeout; this.timeout = timeout;
} }
/**
* @return isShare
*/
public Boolean getIsShare() { public Boolean getIsShare() {
return isShare; return isShare;
} }
/**
* @param isShare 要设置的 isShare
*/
public void setIsShare(Boolean isShare) { public void setIsShare(Boolean isShare) {
this.isShare = isShare; this.isShare = isShare;
} }
/**
* @return isReadHead
*/
public Boolean getIsReadHead() { public Boolean getIsReadHead() {
return isReadHead; return isReadHead;
} }
/**
* @param isReadHead 要设置的 isReadHead
*/
public void setIsReadHead(Boolean isReadHead) { public void setIsReadHead(Boolean isReadHead) {
this.isReadHead = isReadHead; this.isReadHead = isReadHead;
} }
/**
* @return isReadBody
*/
public Boolean getIsReadBody() { public Boolean getIsReadBody() {
return isReadBody; return isReadBody;
} }
/**
* @param isReadBody 要设置的 isReadBody
*/
public void setIsReadBody(Boolean isReadBody) { public void setIsReadBody(Boolean isReadBody) {
this.isReadBody = isReadBody; this.isReadBody = isReadBody;
} }
/**
* @return isV
*/
public Boolean getIsV() { public Boolean getIsV() {
return isV; return isV;
} }
/**
* @param isV 要设置的 isV
*/
public void setIsV(Boolean isV) { public void setIsV(Boolean isV) {
this.isV = isV; this.isV = isV;
} }
/* Javadoc
* @see java.lang.Object#toString()
*/
@Override @Override
public String toString() { public String toString() {
return "SaTokenConfig [tokenName=" + tokenName + ", timeout=" + timeout + ", isShare=" + isShare return "SaTokenConfig [tokenName=" + tokenName + ", timeout=" + timeout + ", isShare=" + isShare
@ -62,4 +113,5 @@ public class SaTokenConfig {
} }

View File

@ -62,7 +62,7 @@ public class SaTokenConfigFactory {
private static Object initPropByMap(Map<String, String> map, Object obj){ private static Object initPropByMap(Map<String, String> map, Object obj){
if(map == null){ if(map == null){
map = new HashMap<>(); map = new HashMap<String, String>();
} }
// 1取出类型 // 1取出类型
@ -84,7 +84,9 @@ public class SaTokenConfigFactory {
Object valueConvert = getObjectByClass(value, field.getType()); // 转换值类型 Object valueConvert = getObjectByClass(value, field.getType()); // 转换值类型
field.setAccessible(true); field.setAccessible(true);
field.set(obj, valueConvert); 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); throw new RuntimeException("属性赋值出错:" + field.getName(), e);
} }
} }

View File

@ -33,27 +33,27 @@ public interface SaTokenDao {
/** /**
* 根据指定key的session如果没有则返回空 * 根据指定key的session如果没有则返回空
* @param key 键名称 * @param sessionId 键名称
* @return * @return
*/ */
public SaSession getSaSession(String sessionId); public SaSession getSaSession(String sessionId);
/** /**
* 将指定session持久化 * 将指定session持久化
* @param key 键名称 * @param session 要保存的session对象
* @param value
* @param timeout 过期时间单位: s * @param timeout 过期时间单位: s
*/ */
public void saveSaSession(SaSession session, long timeout); public void saveSaSession(SaSession session, long timeout);
/** /**
* 更新指定session * 更新指定session
* @param session 要更新的session对象
*/ */
public void updateSaSession(SaSession session); public void updateSaSession(SaSession session);
/** /**
* 删除一个指定的session * 删除一个指定的session
* @param key 键名称 * @param sessionId sessionId
*/ */
public void delSaSession(String sessionId); public void delSaSession(String sessionId);

View File

@ -10,9 +10,7 @@ import cn.dev33.satoken.session.SaSession;
*/ */
public class SaTokenDaoDefault implements SaTokenDao { public class SaTokenDaoDefault implements SaTokenDao {
/** // 所有数据集合
* 所有数据集合
*/
Map<String, Object> dataMap = new HashMap<String, Object>(); Map<String, Object> dataMap = new HashMap<String, Object>();

View File

@ -41,14 +41,17 @@ public class SaSession implements Serializable {
} }
/** /**
* 当前会话创建时间 * 返回当前会话创建时间
* @return 时间戳
*/ */
public long getCreateTime() { public long getCreateTime() {
return createTime; return createTime;
} }
/** /**
* 写入值 * 写入一个值
* @param key 名称
* @param value
*/ */
public void setAttribute(String key, Object value) { public void setAttribute(String key, Object value) {
dataMap.put(key, value); dataMap.put(key, value);
@ -56,14 +59,19 @@ public class SaSession implements Serializable {
} }
/** /**
* 取值 * 取出一个值
* @param key 名称
* @return
*/ */
public Object getAttribute(String key) { public Object getAttribute(String key) {
return dataMap.get(key); return dataMap.get(key);
} }
/** /**
* 取值并指定取不到值时的默认值 * 取值并指定取不到值时的默认值
* @param key 名称
* @param default_value 取不到值的时候返回的默认值
* @return
*/ */
public Object getAttribute(String key, Object default_value) { public Object getAttribute(String key, Object default_value) {
Object value = getAttribute(key); Object value = getAttribute(key);
@ -75,7 +83,8 @@ public class SaSession implements Serializable {
/** /**
* 移除一个key * 移除一个值
* @param key 要移除的值的名字
*/ */
public void removeAttribute(String key) { public void removeAttribute(String key) {
dataMap.remove(key); dataMap.remove(key);
@ -83,7 +92,7 @@ public class SaSession implements Serializable {
} }
/** /**
* 清空所有key * 清空所有
*/ */
public void clearAttribute() { public void clearAttribute() {
dataMap.clear(); dataMap.clear();
@ -91,14 +100,17 @@ public class SaSession implements Serializable {
} }
/** /**
* 是否含有指定key * 是否含有指定key
* @param key 是否含有指定值
* @return 是否含有
*/ */
public boolean containsAttribute(String key) { public boolean containsAttribute(String key) {
return dataMap.keySet().contains(key); return dataMap.keySet().contains(key);
} }
/** /**
* 当前session会话所有key * 返回当前session会话所有key
* @return 所有值的key列表
*/ */
public Set<String> getAttributeKeys() { public Set<String> getAttributeKeys() {
return dataMap.keySet(); return dataMap.keySet();
@ -106,6 +118,7 @@ public class SaSession implements Serializable {
/** /**
* 获取数据集合如果更新map里的值请调用session.update()方法避免数据过时 * 获取数据集合如果更新map里的值请调用session.update()方法避免数据过时
* @return 返回底层储存值的map对象
*/ */
public Map<String, Object> getDataMap() { public Map<String, Object> getDataMap() {
return dataMap; return dataMap;

View File

@ -15,12 +15,21 @@ public class SaSessionCustomUtil {
return SaTokenManager.getConfig().getTokenName() + ":" + session_key + ":session:" + sessionId; return SaTokenManager.getConfig().getTokenName() + ":" + session_key + ":session:" + sessionId;
} }
/** 指定key的session是否存在 */ /**
* 指定key的session是否存在
* @param sessionId session的id
* @return 是否存在
*/
public boolean isExists(String sessionId) { public boolean isExists(String sessionId) {
return SaTokenManager.getDao().getSaSession(getSessionKey(sessionId)) != null; 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) { public static SaSession getSessionById(String sessionId, boolean is_create) {
SaSession session = SaTokenManager.getDao().getSaSession(getSessionKey(sessionId)); SaSession session = SaTokenManager.getDao().getSaSession(getSessionKey(sessionId));
if(session == null && is_create) { if(session == null && is_create) {
@ -29,12 +38,19 @@ public class SaSessionCustomUtil {
} }
return session; return session;
} }
/** 获取指定key的session, 如果没有则新建并返回 */ /**
* 获取指定key的session, 如果没有则新建并返回
* @param sessionId key
* @return session对象
*/
public static SaSession getSessionById(String sessionId) { public static SaSession getSessionById(String sessionId) {
return getSessionById(sessionId, true); return getSessionById(sessionId, true);
} }
/** 删除指定key的session */ /**
* 删除指定key的session
* @param sessionId 删除指定key
*/
public static void delSessionById(String sessionId) { public static void delSessionById(String sessionId) {
SaTokenManager.getDao().delSaSession(getSessionKey(sessionId)); SaTokenManager.getDao().delSaSession(getSessionKey(sessionId));
} }

View File

@ -7,7 +7,12 @@ import java.util.List;
*/ */
public interface StpInterface { 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); public List<Object> getPermissionCodeList(Object login_id, String login_key);

View File

@ -36,12 +36,18 @@ public class StpLogic {
// =================== 获取token 相关 =================== // =================== 获取token 相关 ===================
/** 随机生成一个tokenValue */ /**
* 随机生成一个tokenValue
* @return 生成的tokenValue
*/
public String randomTokenValue() { public String randomTokenValue() {
return UUID.randomUUID().toString(); return UUID.randomUUID().toString();
} }
/** 获取当前tokenValue */ /**
* 获取当前tokenValue
* @return 当前tokenValue
*/
public String getTokenValue(){ public String getTokenValue(){
// 0获取相应对象 // 0获取相应对象
HttpServletRequest request = SpringMVCUtil.getRequest(); HttpServletRequest request = SpringMVCUtil.getRequest();
@ -82,12 +88,19 @@ public class StpLogic {
return null; return null;
} }
/** 获取指定id的tokenValue */ /**
* 获取指定id的tokenValue
* @param login_id
* @return
*/
public String getTokenValueByLoginId(Object login_id) { public String getTokenValueByLoginId(Object login_id) {
return SaTokenManager.getDao().getValue(getKey_LoginId(login_id)); return SaTokenManager.getDao().getValue(getKey_LoginId(login_id));
} }
/** 获取当前会话的token信息tokenName与tokenValue */ /**
* 获取当前会话的token信息tokenName与tokenValue
* @return 一个Map对象
*/
public Map<String, String> getTokenInfo() { public Map<String, String> getTokenInfo() {
Map<String, String> map = new HashMap<String, String>(); Map<String, String> map = new HashMap<String, String>();
map.put("tokenName", getKey_tokenName()); 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) { public void setLoginId(Object login_id) {
// 1获取相应对象 // 1获取相应对象
@ -125,7 +141,9 @@ public class StpLogic {
SaCookieUtil.addCookie(SpringMVCUtil.getResponse(), getKey_tokenName(), tokenValue, "/", (int)config.getTimeout()); // cookie注入 SaCookieUtil.addCookie(SpringMVCUtil.getResponse(), getKey_tokenName(), tokenValue, "/", (int)config.getTimeout()); // cookie注入
} }
/** 当前会话注销登录 */ /**
* 当前会话注销登录
*/
public void logout() { public void logout() {
Object login_id = getLoginId_defaultNull(); Object login_id = getLoginId_defaultNull();
if(login_id != null) { 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) { public void logoutByLoginId(Object login_id) {
// 获取相应tokenValue // 获取相应tokenValue
@ -152,12 +173,18 @@ public class StpLogic {
// 查询相关 // 查询相关
/** 获取当前会话是否已经登录 */ /**
* 获取当前会话是否已经登录
* @return 是否已登录
*/
public boolean isLogin() { public boolean isLogin() {
return getLoginId_defaultNull() != null; return getLoginId_defaultNull() != null;
} }
/** 获取当前会话登录id, 如果未登录,则抛出异常 */ /**
* 获取当前会话登录id, 如果未登录则抛出异常
* @return
*/
public Object getLoginId() { public Object getLoginId() {
Object login_id = getLoginId_defaultNull(); Object login_id = getLoginId_defaultNull();
if(login_id == null) { if(login_id == null) {
@ -166,7 +193,11 @@ public class StpLogic {
return login_id; return login_id;
} }
/** 获取当前会话登录id, 如果未登录,则返回默认值 */ /**
* 获取当前会话登录id, 如果未登录则返回默认值
* @param default_value
* @return
*/
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T>T getLoginId(T default_value) { public <T>T getLoginId(T default_value) {
Object login_id = getLoginId_defaultNull(); Object login_id = getLoginId_defaultNull();
@ -176,7 +207,10 @@ public class StpLogic {
return (T)login_id; return (T)login_id;
} }
/** 获取当前会话登录id, 如果未登录则返回null */ /**
* 获取当前会话登录id, 如果未登录则返回null
* @return
*/
public Object getLoginId_defaultNull() { public Object getLoginId_defaultNull() {
String tokenValue = getTokenValue(); String tokenValue = getTokenValue();
if(tokenValue != null) { if(tokenValue != null) {
@ -188,12 +222,18 @@ public class StpLogic {
return null; return null;
} }
/** 获取当前会话登录id, 并转换为String */ /**
* 获取当前会话登录id, 并转换为String
* @return
*/
public String getLoginId_asString() { public String getLoginId_asString() {
return String.valueOf(getLoginId()); return String.valueOf(getLoginId());
} }
/** 获取当前会话登录id, 并转换为int */ /**
* 获取当前会话登录id, 并转换为int
* @return
*/
public int getLoginId_asInt() { public int getLoginId_asInt() {
// Object login_id = getLoginId(); // Object login_id = getLoginId();
// if(login_id instanceof Integer) { // if(login_id instanceof Integer) {
@ -202,7 +242,10 @@ public class StpLogic {
return Integer.valueOf(String.valueOf(getLoginId())); return Integer.valueOf(String.valueOf(getLoginId()));
} }
/** 获取当前会话登录id, 并转换为long */ /**
* 获取当前会话登录id, 并转换为long
* @return
*/
public long getLoginId_asLong() { public long getLoginId_asLong() {
// Object login_id = getLoginId(); // Object login_id = getLoginId();
// if(login_id instanceof Long) { // if(login_id instanceof Long) {
@ -215,7 +258,12 @@ public class StpLogic {
// =================== session相关 =================== // =================== session相关 ===================
/** 获取指定key的session, 如果没有is_create=是否新建并返回 */ /**
* 获取指定key的session, 如果没有is_create=是否新建并返回
* @param sessionId
* @param is_create
* @return
*/
protected SaSession getSessionBySessionId(String sessionId, boolean is_create) { protected SaSession getSessionBySessionId(String sessionId, boolean is_create) {
SaSession session = SaTokenManager.getDao().getSaSession(sessionId); SaSession session = SaTokenManager.getDao().getSaSession(sessionId);
if(session == null && is_create) { if(session == null && is_create) {
@ -225,12 +273,19 @@ public class StpLogic {
return session; return session;
} }
/** 获取指定login_id的session */ /**
* 获取指定login_id的session
* @param login_id
* @return
*/
public SaSession getSessionByLoginId(Object login_id) { public SaSession getSessionByLoginId(Object login_id) {
return getSessionBySessionId(getKey_session(login_id), false); return getSessionBySessionId(getKey_session(login_id), false);
} }
/** 获取当前会话的session */ /**
* 获取当前会话的session
* @return
*/
public SaSession getSession() { public SaSession getSession() {
return getSessionBySessionId(getKey_session(getLoginId()), true); 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) { public boolean hasPermission(Object login_id, Object pcode) {
List<Object> pcodeList = SaTokenManager.getStp().getPermissionCodeList(login_id, login_key); List<Object> pcodeList = SaTokenManager.getStp().getPermissionCodeList(login_id, login_key);
return !(pcodeList == null || pcodeList.contains(pcode) == false); return !(pcodeList == null || pcodeList.contains(pcode) == false);
} }
/** 当前会话是否含有指定权限 */ /**
* 当前会话是否含有指定权限
* @param pcode
* @return
*/
public boolean hasPermission(Object pcode) { public boolean hasPermission(Object pcode) {
return hasPermission(getLoginId(), pcode); return hasPermission(getLoginId(), pcode);
} }
/** 当前账号是否含有指定权限 没有就抛出异常 */ /**
* 当前账号是否含有指定权限 没有就抛出异常
* @param pcode
*/
public void checkPermission(Object pcode) { public void checkPermission(Object pcode) {
if(hasPermission(pcode) == false) { if(hasPermission(pcode) == false) {
throw new NotPermissionException(pcode); throw new NotPermissionException(pcode);
} }
} }
/** 当前账号是否含有指定权限 【指定多个,必须全都有】 */ /**
* 当前账号是否含有指定权限 指定多个必须全都有
* @param pcodeArray
*/
public void checkPermissionAnd(Object... pcodeArray){ public void checkPermissionAnd(Object... pcodeArray){
Object login_id = getLoginId(); Object login_id = getLoginId();
List<Object> pcodeList = SaTokenManager.getStp().getPermissionCodeList(login_id, login_key); List<Object> pcodeList = SaTokenManager.getStp().getPermissionCodeList(login_id, login_key);
@ -268,7 +338,10 @@ public class StpLogic {
} }
} }
/** 当前账号是否含有指定权限 【指定多个,有一个就可以了】 */ /**
* 当前账号是否含有指定权限 指定多个有一个就可以了
* @param pcodeArray
*/
public void checkPermissionOr(Object... pcodeArray){ public void checkPermissionOr(Object... pcodeArray){
Object login_id = getLoginId(); Object login_id = getLoginId();
List<Object> pcodeList = SaTokenManager.getStp().getPermissionCodeList(login_id, login_key); List<Object> pcodeList = SaTokenManager.getStp().getPermissionCodeList(login_id, login_key);
@ -285,19 +358,34 @@ public class StpLogic {
// =================== 返回相应key =================== // =================== 返回相应key ===================
/** 获取key客户端 tokenName */ /**
* 获取key客户端 tokenName
* @return
*/
public String getKey_tokenName() { public String getKey_tokenName() {
return SaTokenManager.getConfig().getTokenName(); return SaTokenManager.getConfig().getTokenName();
} }
/** 获取key tokenValue 持久化 */ /**
* 获取key tokenValue 持久化
* @param tokenValue
* @return
*/
public String getKey_TokenValue(String tokenValue) { public String getKey_TokenValue(String tokenValue) {
return SaTokenManager.getConfig().getTokenName() + ":" + login_key + ":token:" + tokenValue; return SaTokenManager.getConfig().getTokenName() + ":" + login_key + ":token:" + tokenValue;
} }
/** 获取key id 持久化 */ /**
* 获取key id 持久化
* @param login_id
* @return
*/
public String getKey_LoginId(Object login_id) { public String getKey_LoginId(Object login_id) {
return SaTokenManager.getConfig().getTokenName() + ":" + login_key + ":id:" + 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) { public String getKey_session(Object login_id) {
return SaTokenManager.getConfig().getTokenName() + ":" + login_key + ":session:" + login_id; return SaTokenManager.getConfig().getTokenName() + ":" + login_key + ":session:" + login_id;
} }

View File

@ -19,110 +19,175 @@ public class StpUtil {
// =================== 获取token 相关 =================== // =================== 获取token 相关 ===================
/** 获取当前tokenValue */ /**
* 获取当前tokenValue
* @return 当前tokenValue
*/
public static String getTokenValue() { public static String getTokenValue() {
return stpLogic.getTokenValue(); return stpLogic.getTokenValue();
} }
/** 获取指定id的tokenValue */ /**
* 获取指定id的tokenValue
* @param login_id
* @return
*/
public static String getTokenValueByLoginId(Object login_id) { public static String getTokenValueByLoginId(Object login_id) {
return stpLogic.getTokenValueByLoginId(login_id); return stpLogic.getTokenValueByLoginId(login_id);
} }
/** 获取当前会话的token信息tokenName与tokenValue */ /**
* 获取当前会话的token信息tokenName与tokenValue
* @return 一个Map对象
*/
public static Map<String, String> getTokenInfo() { public static Map<String, String> getTokenInfo() {
return stpLogic.getTokenInfo(); return stpLogic.getTokenInfo();
} }
// =================== 登录相关操作 =================== // =================== 登录相关操作 ===================
/** 在当前会话上设置登录id建议的类型long | int | String */ /**
* 在当前会话上登录id
* @param login_id 登录id 建议的类型long | int | String
*/
public static void setLoginId(Object login_id) { public static void setLoginId(Object login_id) {
stpLogic.setLoginId(login_id); stpLogic.setLoginId(login_id);
} }
/** 当前会话注销登录 */ /**
* 当前会话注销登录
*/
public static void logout() { public static void logout() {
stpLogic.logout(); stpLogic.logout();
} }
/** 指定login_id的会话注销登录踢人下线 */ /**
* 指定login_id的会话注销登录踢人下线
* @param login_id 账号id
*/
public static void logoutByLoginId(Object login_id) { public static void logoutByLoginId(Object login_id) {
stpLogic.logoutByLoginId(login_id); stpLogic.logoutByLoginId(login_id);
} }
// 查询相关 // 查询相关
/** 获取当前会话是否已经登录 */ /**
* 获取当前会话是否已经登录
* @return 是否已登录
*/
public static boolean isLogin() { public static boolean isLogin() {
return stpLogic.isLogin(); return stpLogic.isLogin();
} }
/** 获取当前会话登录id, 如果未登录,则抛出异常 */ /**
* 获取当前会话登录id, 如果未登录则抛出异常
* @return
*/
public static Object getLoginId() { public static Object getLoginId() {
return stpLogic.getLoginId(); return stpLogic.getLoginId();
} }
/** 获取当前会话登录id, 如果未登录,则返回默认值 */ /**
* 获取当前会话登录id, 如果未登录则返回默认值
* @param default_value
* @return
*/
public static <T> T getLoginId(T default_value) { public static <T> T getLoginId(T default_value) {
return stpLogic.getLoginId(default_value); return stpLogic.getLoginId(default_value);
} }
/** 获取当前会话登录id, 如果未登录则返回null */ /**
* 获取当前会话登录id, 如果未登录则返回null
* @return
*/
public static Object getLoginId_defaultNull() { public static Object getLoginId_defaultNull() {
return stpLogic.getLoginId_defaultNull(); return stpLogic.getLoginId_defaultNull();
} }
/** 获取当前会话登录id, 并转换为String */ /**
* 获取当前会话登录id, 并转换为String
* @return
*/
public static String getLoginId_asString() { public static String getLoginId_asString() {
return stpLogic.getLoginId_asString(); return stpLogic.getLoginId_asString();
} }
/** 获取当前会话登录id, 并转换为int */ /**
* 获取当前会话登录id, 并转换为int
* @return
*/
public static int getLoginId_asInt() { public static int getLoginId_asInt() {
return stpLogic.getLoginId_asInt(); return stpLogic.getLoginId_asInt();
} }
/** 获取当前会话登录id, 并转换为long */ /**
* 获取当前会话登录id, 并转换为long
* @return
*/
public static long getLoginId_asLong() { public static long getLoginId_asLong() {
return stpLogic.getLoginId_asLong(); return stpLogic.getLoginId_asLong();
} }
// =================== session相关 =================== // =================== session相关 ===================
/** 获取指定login_id的session */ /**
* 获取指定login_id的session
* @param login_id
* @return
*/
public static SaSession getSessionByLoginId(Object login_id) { public static SaSession getSessionByLoginId(Object login_id) {
return stpLogic.getSessionByLoginId(login_id); return stpLogic.getSessionByLoginId(login_id);
} }
/** 获取当前会话的session */ /**
* 获取当前会话的session
* @return
*/
public static SaSession getSession() { public static SaSession getSession() {
return stpLogic.getSession(); return stpLogic.getSession();
} }
// =================== 权限验证操作 =================== // =================== 权限验证操作 ===================
/** 指定login_id是否含有指定权限 */ /**
* 指定login_id是否含有指定权限
* @param login_id
* @param pcode
* @return
*/
public static boolean hasPermission(Object login_id, Object pcode) { public static boolean hasPermission(Object login_id, Object pcode) {
return stpLogic.hasPermission(login_id, pcode); return stpLogic.hasPermission(login_id, pcode);
} }
/** 当前会话是否含有指定权限 */ /**
* 当前会话是否含有指定权限
* @param pcode
* @return
*/
public static boolean hasPermission(Object pcode) { public static boolean hasPermission(Object pcode) {
return stpLogic.hasPermission(pcode); return stpLogic.hasPermission(pcode);
} }
/** 当前账号是否含有指定权限 没有就抛出异常 */ /**
* 当前账号是否含有指定权限 没有就抛出异常
* @param pcode
*/
public static void checkPermission(Object pcode) { public static void checkPermission(Object pcode) {
stpLogic.checkPermission(pcode); stpLogic.checkPermission(pcode);
} }
/** 当前账号是否含有指定权限 【指定多个,必须全都有】 */ /**
* 当前账号是否含有指定权限 指定多个必须全都有
* @param pcodeArray
*/
public static void checkPermissionAnd(Object... pcodeArray) { public static void checkPermissionAnd(Object... pcodeArray) {
stpLogic.checkPermissionAnd(pcodeArray); stpLogic.checkPermissionAnd(pcodeArray);
} }
/** 当前账号是否含有指定权限 【指定多个,有一个就可以了】 */ /**
* 当前账号是否含有指定权限 指定多个有一个就可以了
* @param pcodeArray
*/
public static void checkPermissionOr(Object... pcodeArray) { public static void checkPermissionOr(Object... pcodeArray) {
stpLogic.checkPermissionOr(pcodeArray); stpLogic.checkPermissionOr(pcodeArray);
} }

View File

@ -15,6 +15,9 @@ public class SaCookieUtil {
/** /**
* 获取指定cookie * 获取指定cookie
* @param request
* @param cookieName
* @return
*/ */
public static Cookie getCookie(HttpServletRequest request, String cookieName) { public static Cookie getCookie(HttpServletRequest request, String cookieName) {
Cookie[] cookies = request.getCookies(); Cookie[] cookies = request.getCookies();
@ -32,6 +35,11 @@ public class SaCookieUtil {
/** /**
* 添加cookie * 添加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) { public static void addCookie(HttpServletResponse response,String name,String value,String path,int timeout) {
Cookie cookie = new Cookie(name, value); Cookie cookie = new Cookie(name, value);
@ -46,6 +54,9 @@ public class SaCookieUtil {
/** /**
* 删除cookie * 删除cookie
* @param request
* @param response
* @param name
*/ */
public static void delCookie(HttpServletRequest request,HttpServletResponse response,String name) { public static void delCookie(HttpServletRequest request,HttpServletResponse response,String name) {
Cookie[] cookies = request.getCookies(); Cookie[] cookies = request.getCookies();
@ -62,6 +73,10 @@ public class SaCookieUtil {
/** /**
* 修改cookie的value值 * 修改cookie的value值
* @param request
* @param response
* @param name
* @param value
*/ */
public static void updateCookie(HttpServletRequest request,HttpServletResponse response,String name,String value) { public static void updateCookie(HttpServletRequest request,HttpServletResponse response,String name,String value) {
Cookie[] cookies = request.getCookies(); Cookie[] cookies = request.getCookies();

View File

@ -13,7 +13,10 @@ import org.springframework.web.context.request.ServletRequestAttributes;
*/ */
public class SpringMVCUtil { public class SpringMVCUtil {
// 获取当前会话的 request /**
* 获取当前会话的 request
* @return
*/
public static HttpServletRequest getRequest() { public static HttpServletRequest getRequest() {
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();// 大善人SpringMVC提供的封装 ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();// 大善人SpringMVC提供的封装
if(servletRequestAttributes == null) { if(servletRequestAttributes == null) {
@ -22,7 +25,10 @@ public class SpringMVCUtil {
return servletRequestAttributes.getRequest(); return servletRequestAttributes.getRequest();
} }
// 获取当前会话的 /**
* 获取当前会话的 response
* @return
*/
public static HttpServletResponse getResponse() { public static HttpServletResponse getResponse() {
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();// 大善人SpringMVC提供的封装 ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();// 大善人SpringMVC提供的封装
if(servletRequestAttributes == null) { if(servletRequestAttributes == null) {

View File

@ -2,7 +2,6 @@
------ ------
## 源码 ## 源码
你可以通过`github`或者`gitee`来获取源码 你可以通过`github`或者`gitee`来获取源码
- github地址[https://github.com/click33/sa-token](https://github.com/click33/sa-token) - github地址[https://github.com/click33/sa-token](https://github.com/click33/sa-token)
@ -14,9 +13,20 @@
- sa-token-doc: 文档介绍 - sa-token-doc: 文档介绍
## jar包下载 ## jar包下载
[点击下载](https://color-test.oss-cn-qingdao.aliyuncs.com/sa-token/sa-token-spring-1.0.0.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>
```

View File

@ -11,18 +11,15 @@
在IDE中新建一个Springboot项目例如`sa-token-demo-springboot`不会的同学请自行百度或者参考github示例 在IDE中新建一个Springboot项目例如`sa-token-demo-springboot`不会的同学请自行百度或者参考github示例
#### 2、设置jar包依赖 #### 2、设置jar包依赖
- 在项目根目录新建文件夹`lib`,将 `sa-token-spring-xxx.jar` 复制到其中 - 在 `pom.xml` 中添加依赖:
- 并在 `pom.xml` 中添加依赖:
``` xml ``` xml
<!-- sa-token 安全认证 --> <!-- sa-token 权限认证, 在线文档http://sa-token.dev33.cn/ -->
<dependency> <dependency>
<groupId>cn.dev33.sa-token</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-spring</artifactId> <artifactId>sa-token</artifactId>
<version>1.0.0</version> <version>1.0.0</version>
<scope>system</scope> </dependency>
<systemPath>${project.basedir}/lib/sa-token-spring-1.0.0.jar</systemPath>
</dependency>
``` ```
#### 3、配置文件 #### 3、配置文件