cookie, 退出删除redis中的数据

beetlsql3-dev
Mlxa0324 2 years ago
parent 08fe028b2e
commit 54639f5b4d

@ -27,6 +27,7 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
import static com.ibeetl.admin.core.util.HttpRequestLocal.standardRedisTokenKey;
import static com.ibeetl.admin.core.util.servlet.ServletUtils.getRequest;
/**
@ -185,10 +186,11 @@ public class CorePlatformService {
}
public void setLoginUserByToken(String token, CoreUser user, CoreOrg currentOrg, List<CoreOrg> orgs,Object other) {
httpRequestLocal.setSessionValueByToken(token, CorePlatformService.ACCESS_CURRENT_USER, user);
httpRequestLocal.setSessionValueByToken(token, CorePlatformService.ACCESS_CURRENT_ORG, currentOrg);
httpRequestLocal.setSessionValueByToken(token, CorePlatformService.ACCESS_USER_ORGS, orgs);
httpRequestLocal.setSessionValueByToken(token, CorePlatformService.ACCESS_USER_OTHER, other);
String standardRedisTokenKey = standardRedisTokenKey(token);
httpRequestLocal.setSessionValueByToken(standardRedisTokenKey, CorePlatformService.ACCESS_CURRENT_USER, user);
httpRequestLocal.setSessionValueByToken(standardRedisTokenKey, CorePlatformService.ACCESS_CURRENT_ORG, currentOrg);
httpRequestLocal.setSessionValueByToken(standardRedisTokenKey, CorePlatformService.ACCESS_USER_ORGS, orgs);
httpRequestLocal.setSessionValueByToken(standardRedisTokenKey, CorePlatformService.ACCESS_USER_OTHER, other);
}
public MenuItem getMenuItem(long userId, long orgId) {

@ -1,9 +1,12 @@
package com.ibeetl.admin.core.util;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.ibeetl.admin.core.conf.MVCConf;
import org.apache.commons.compress.utils.Lists;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.RedisConnectionFactory;
@ -36,11 +39,11 @@ import static com.ibeetl.admin.core.util.servlet.ServletUtils.getRequest;
@SuppressWarnings("ALL")
public class HttpRequestLocal {
public static final String AUTHORIZATION = "token";
private static Logger log = LoggerFactory.getLogger(HttpRequestLocal.class);
@Autowired private StringRedisTemplate stringRedisTemplate;
public static final String AUTHORIZATION = "token";
private HttpRequestLocal(){ }
private StringRedisTemplate stringRedisTemplate;
@Bean
private StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
@ -53,6 +56,31 @@ public class HttpRequestLocal {
public Map<String, DefaultRedisMap<String,Object>> tokenRedisMap = new ConcurrentHashMap<>();
@Autowired
public void init(StringRedisTemplate stringRedisTemplate) {
this.stringRedisTemplate = stringRedisTemplate;
Set<String> keys = stringRedisTemplate.keys(TOKEN_KEY + ":*");
CollectionUtil.emptyIfNull(keys).stream().parallel().forEach(key -> {
Map<Object, Object> entries = stringRedisTemplate.opsForHash().entries(key);
DefaultRedisMap<String, Object> map = null;
for (Map.Entry<Object, Object> entry : entries.entrySet()) {
String tempKey = entry.getKey().toString();
Object mapValue = entry.getValue();
if (map == null) {
map = new DefaultRedisMap<>(tempKey, stringRedisTemplate);
}
map.put(tempKey, mapValue);
}
tokenRedisMap.put(key, map);
});
log.info("读取到redis中的session数量{}写入到java内存中", keys.size());
}
/**
* : <br>
* jwtToken
@ -206,13 +234,12 @@ public class HttpRequestLocal {
* @param key
* @param obj
*/
public void setSessionValueByToken(String token, String key, Object obj){
public void setSessionValueByToken(final String originalToken, String key, Object obj){
// token 标准化
token = jwtTokenSplitTimestamp(Objects.requireNonNull(token))[0];
String token = jwtTokenSplitTimestamp(Objects.requireNonNull(originalToken))[0];
// token的二次加工用于分组
if (token != null) {
token = TOKEN_KEY + ":" + token;
}
token = standardRedisTokenKey(token);
DefaultRedisMap<String, Object> defaultRedisMap = tokenRedisMap.get(token);
if (defaultRedisMap == null) {
defaultRedisMap = new DefaultRedisMap<>(token, stringRedisTemplate);
@ -246,7 +273,12 @@ public class HttpRequestLocal {
if (headerToken == null) {
return;
}
tokenRedisMap.remove(standardRedisTokenKey(headerToken));
String key = standardRedisTokenKey(headerToken);
DefaultRedisMap<String, Object> redisMap = tokenRedisMap.get(key);
if (redisMap != null) {
redisMap.clear();
tokenRedisMap.remove(key);
}
}

@ -9,8 +9,9 @@ function getCookie(key){
var va = null;
for (let str of document.cookie.split(";")) {
var kv = str.split("=");
if (kv[0] == key || Number(kv[0]+'') == Number(key+'') || kv[0] === key || (kv[0]+'') == (key+'') || (kv[0].indexOf(key)>=0 && key.indexOf('TOKEN') >= 0)) {
va = kv[1];
var k = kv[0].trim();
if (k == key || Number(k+'') == Number(key+'') || k === key || (k+'') == (key+'') || (k.indexOf(key)>=0 && key.indexOf('TOKEN') >= 0)) {
va = kv[1].trim();
break;
}
}
@ -380,19 +381,9 @@ var Common = {
* ajax初始化
*/
ajaxInit: function() {
if (window.sessionStorage && window.sessionStorage.length) {
for (let key of Object.keys(sessionStorage)) {
// 只取第一个出现的TOKEN值
if (key.toUpperCase().endsWith("_TOKEN")) {
var tokenKey = sessionStorage.getItem("TOKEN_KEY");
var token = this.cookieGet(tokenKey);
if (token != null) {
$.ajaxSetup({headers: { token }})
}
return
}
}
}
var _role_tag = getHeadTag();
var key = getCookie(_role_tag);
$.ajaxSetup({headers: { token: getCookie(key) , _role_tag}})
},
/**
* cookie获取
@ -401,8 +392,9 @@ var Common = {
var va = null;
for (let str of document.cookie.split(";")) {
var kv = str.split("=");
if (kv[0] == key || Number(kv[0]+'') == Number(key+'') || kv[0] === key || (kv[0]+'') == (key+'') || (kv[0].indexOf(key)>=0 && key.indexOf('TOKEN') >= 0)) {
va = kv[1];
var k = kv[0].trim();
if (k == key || Number(k+'') == Number(key+'') || k === key || (k+'') == (key+'') || (k.indexOf(key)>=0 && key.indexOf('TOKEN') >= 0)) {
va = kv[1].trim();
break;
}
}
@ -771,7 +763,7 @@ var Common = {
getKeyInfo:function (val){ //组装缓存的key值
const tag = getHeadTag(); //拿到头部指定参数
if($.isEmpty(tag)){
const tokenKye = getCookie(tag);; //根据唯一值拿存token的key
const tokenKye = getCookie(tag); //根据唯一值拿存token的key
if(!$.isEmpty(tokenKye)){
return val + "_" + tokenKye; //传入的值 + 当前人的token的key
}

File diff suppressed because it is too large Load Diff

@ -1,80 +1,71 @@
/*jslint browser: true */ /*global jQuery: true */
/**
* jQuery Cookie plugin
*
* Copyright (c) 2010 Klaus Hartl (stilbuero.de)
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
/*!
* jQuery Cookie Plugin v1.4.1
* https://github.com/carhartl/jquery-cookie
*
* Copyright 2013 Klaus Hartl
* Released under the MIT license
*/
(function (factory) {
if (typeof define === 'function' && define.amd) {
// AMD
define(['jquery'], factory);
} else if (typeof exports === 'object') {
// CommonJS
factory(require('jquery'));
} else {
// Browser globals
factory(jQuery);
}
}(function ($) {
// TODO JsDoc
var pluses = /\+/g;
/**
* Create a cookie with the given key and value and other optional parameters.
*
* @example $.cookie('the_cookie', 'the_value');
* @desc Set the value of a cookie.
* @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
* @desc Create a cookie with all available options.
* @example $.cookie('the_cookie', 'the_value');
* @desc Create a session cookie.
* @example $.cookie('the_cookie', null);
* @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
* used when the cookie was set.
*
* @param String key The key of the cookie.
* @param String value The value of the cookie.
* @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
* @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
* If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
* If set to null or omitted, the cookie will be a session cookie and will not be retained
* when the the browser exits.
* @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
* @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
* @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
* require a secure protocol (like HTTPS).
* @type undefined
*
* @name $.cookie
* @cat Plugins/Cookie
* @author Klaus Hartl/klaus.hartl@stilbuero.de
*/
function encode(s) {
return config.raw ? s : encodeURIComponent(s);
}
/**
* Get the value of a cookie with the given key.
*
* @example $.cookie('the_cookie');
* @desc Get the value of a cookie.
*
* @param String key The key of the cookie.
* @return The value of the cookie.
* @type String
*
* @name $.cookie
* @cat Plugins/Cookie
* @author Klaus Hartl/klaus.hartl@stilbuero.de
*/
jQuery.cookie = function (key, value, options) {
function decode(s) {
return config.raw ? s : decodeURIComponent(s);
}
// key and value given, set cookie...
if (arguments.length > 1 && (value === null || typeof value !== "object")) {
options = jQuery.extend({}, options);
function stringifyCookieValue(value) {
return encode(config.json ? JSON.stringify(value) : String(value));
}
function parseCookieValue(s) {
if (s.indexOf('"') === 0) {
// This is a quoted cookie as according to RFC2068, unescape...
s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
}
try {
// Replace server-side written pluses with spaces.
// If we can't decode the cookie, ignore it, it's unusable.
// If we can't parse the cookie, ignore it, it's unusable.
s = decodeURIComponent(s.replace(pluses, ' '));
return config.json ? JSON.parse(s) : s;
} catch(e) {}
}
if (value === null) {
options.expires = -1;
function read(s, converter) {
var value = config.raw ? s : parseCookieValue(s);
return $.isFunction(converter) ? converter(value) : value;
}
var config = $.cookie = function (key, value, options) {
// Write
if (value !== undefined && !$.isFunction(value)) {
options = $.extend({}, config.defaults, options);
if (typeof options.expires === 'number') {
var days = options.expires, t = options.expires = new Date();
t.setDate(t.getDate() + days);
t.setTime(+t + days * 864e+5);
}
return (document.cookie = [
encodeURIComponent(key), '=',
options.raw ? String(value) : encodeURIComponent(String(value)),
encode(key), '=', stringifyCookieValue(value),
options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
options.path ? '; path=' + options.path : '',
options.domain ? '; domain=' + options.domain : '',
@ -82,8 +73,45 @@ jQuery.cookie = function (key, value, options) {
].join(''));
}
// key and possibly options given, get cookie...
options = value || {};
var result, decode = options.raw ? function (s) { return s; } : decodeURIComponent;
return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null;
// Read
var result = key ? undefined : {};
// To prevent the for loop in the first place assign an empty array
// in case there are no cookies at all. Also prevents odd result when
// calling $.cookie().
var cookies = document.cookie ? document.cookie.split('; ') : [];
for (var i = 0, l = cookies.length; i < l; i++) {
var parts = cookies[i].split('=');
var name = decode(parts.shift());
var cookie = parts.join('=');
if (key && key === name) {
// If second argument (value) is a function it's a converter...
result = read(cookie, value);
break;
}
// Prevent storing a cookie that we couldn't decode.
if (!key && (cookie = read(cookie)) !== undefined) {
result[name] = cookie;
}
}
return result;
};
config.defaults = {};
$.removeCookie = function (key, options) {
if ($.cookie(key) === undefined) {
return false;
}
// Must not alter options, thus extending a fresh object...
$.cookie(key, '', $.extend({}, options, { expires: -1 }));
return !$.cookie(key);
};
}));

@ -22,6 +22,8 @@
<link rel="stylesheet" type="text/css" href="${ctxPath}/css/cdn/font_520106_q8xykrwf86ywrk9.css?v=${jsVer}" media="all"/>
<link rel="stylesheet" type="text/css" href="${ctxPath}/css/fs.css?v=${jsVer}" media="all"/>
<script type="text/javascript" src="${ctxPath}/plugins/jquery/jquery.min.js?v=${jsVer}"></script>
<script type="text/javascript" src="${ctxPath}/plugins/cookie.js"></script>
<script type="text/javascript" src="${ctxPath}/plugins/jquery.cookie.js"></script>
<!-- 业务公用库 -->
<script type="text/javascript" src="${ctxPath}/js/common.js?v=${jsVer}"></script>
<script type="text/javascript" src="${ctxPath}/js/lib.js?v=${jsVer}"></script>

@ -1,6 +1,5 @@
<!--#layout("/common/container.html"){ -->
<script type="text/javascript" src="${ctxPath}/plugins/webSocket.js?v=${jsVer}"></script>
<script type="text/javascript" src="${ctxPath}/plugins/jquery.cookie.js"></script>
<style>
@media screen and (max-width: 1300px) {
#operation .layui-nav-item a {
@ -403,6 +402,10 @@
// $.cookie('JT_S_01_token', '', { expires: -1 }); // 删除 cookie
var ret = Common.postAjax("/logout.json");
sessionStorage.clear();
debugger
var tag = getHeadTag();
$.removeCookie(getCookie(tag));
$.removeCookie(tag);
if (ret.code == 0 || ret.code == 401) {
Common.info("退出成功!");
Common.awaitTime(1200, function () {

Loading…
Cancel
Save