Angular 4中能否重写sessionStorage方法实现自动加密解密?
当然可以!重写
sessionStorage的方法就是最佳方案 完全不用修改你现有的业务代码,通过重写原生的setItem和getItem,就能让所有存储/读取操作自动带上加密解密逻辑。下面是具体实现思路和代码示例:
核心实现步骤
1. 先保存原生方法的引用
重写前一定要先把原始的setItem和getItem存起来,不然重写后就没法调用真正的存储逻辑了。
2. 重写setItem自动加密
在自定义的setItem里,先对传入的值加密,再调用原生方法存储加密后的内容。
3. 重写getItem自动解密
读取时先通过原生方法拿到加密值,解密后再返回给调用者。
4. 加上容错处理
比如解密失败时返回null或给出错误提示,避免影响业务代码。
完整代码示例
假设你已经有了成熟的encrypt和decrypt函数,这里用Base64做示例(实际替换成你的加密算法即可):
// 你的加密解密实现(替换成你自己的逻辑,比如AES) function encrypt(data) { // 如果存储的是对象,先转成字符串 const processedData = typeof data === 'object' ? JSON.stringify(data) : data; return btoa(processedData); } function decrypt(encryptedData) { if (!encryptedData) return null; try { const decryptedStr = atob(encryptedData); // 尝试解析为对象,失败则返回原始字符串 try { return JSON.parse(decryptedStr); } catch { return decryptedStr; } } catch (e) { console.error('解密失败:', e); return null; } } // 保存原生方法引用 const originalSetItem = sessionStorage.setItem; const originalGetItem = sessionStorage.getItem; // 重写setItem sessionStorage.setItem = function(key, value) { const encryptedValue = encrypt(value); // 用call绑定this,确保上下文正确 originalSetItem.call(this, key, encryptedValue); }; // 重写getItem sessionStorage.getItem = function(key) { const encryptedValue = originalGetItem.call(this, key); return decrypt(encryptedValue); };
效果验证
现在你原来的代码完全不用改:
// 自动加密后存储 sessionStorage.setItem('token', 'my token'); sessionStorage.setItem('userInfo', { id: 123, name: 'Alice' }); // 自动解密后获取 const token = sessionStorage.getItem('token'); // 输出 'my token' const userInfo = sessionStorage.getItem('userInfo'); // 输出 { id: 123, name: 'Alice' }
备选方案(不推荐,仅作补充)
如果你不想修改原生sessionStorage,也可以封装一个自定义的存储类,但这样需要把所有现有代码里的sessionStorage替换成这个类,不符合你“不想改已有代码”的需求:
class EncryptedSessionStorage { static setItem(key, value) { const encryptedValue = encrypt(value); sessionStorage.setItem(key, encryptedValue); } static getItem(key) { const encryptedValue = sessionStorage.getItem(key); return decrypt(encryptedValue); } // 其他方法如removeItem、clear可以按需封装 }
内容的提问来源于stack exchange,提问作者Hamid Hosseini
相关产品推荐
相关产品推荐

