热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

请问将全局配置放在application作用域中安全吗?

如题,最近在研究微信公众号开发,我搭建了一个项目,然后在服务器启动时把appidappsecret这类比较敏感的信息加载到application中了,如下:packagetest.weix
如题,最近在研究微信公众号开发,我搭建了一个项目,然后在服务器启动时把appid appsecret这类比较敏感的信息加载到application中了,如下:

package test.weixin.common.frame;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.ServletContextAware;

import test.weixin.common.entity.Config;
import test.weixin.common.entity.ConfigExample;
import test.weixin.common.mapper.ConfigMapper;
import test.weixin.common.util.Constants;

public class SystemInit implements InitializingBean, ServletContextAware, ServletContextListener {

private static final Logger logger = LoggerFactory.getLogger(SystemInit.class);

@Autowired
private ConfigMapper configMapper;

/**
 * 把数据库中查到的所有config加载到application中
 */
@Override
public void setServletContext(ServletContext application) {
logger.info("开始加载配置...");
List configList = configMapper.selectByExample(new ConfigExample());
Map map = new HashMap();
for (Config config : configList) {
logger.info(config.getConfigCode() + " -----> " + config.getConfigValue());
map.put(config.getConfigCode(), config.getConfigValue());
}
application.setAttribute(Constants.Application.CONFIG, map);
logger.info("加载配置完成");
}

/**
 * 启动进程
 */
@Override
public void contextInitialized(ServletContextEvent arg0) {
logger.info("开始定时获取access_token...");
TokenThread tokenThread = new TokenThread();
tokenThread.start();
}

@Override
public void afterPropertiesSet() throws Exception {}

@Override
public void contextDestroyed(ServletContextEvent arg0) {}

}



请问这样做安全性如何?如果我不在jsp页面上展示这些信息的话,用户是不是获取不到?


另外还有个问题:像这样加载全局配置的步骤,目前的主流方法是怎么做?是把这些信息储存在一个static的变量中?还是像我这样存在application中?

12 个解决方案

#1


我觉得放在哪不是最 主要的,最主要的是你要加密啊。。。

#2


引用 1 楼 zc881124 的回复:
我觉得放在哪不是最 主要的,最主要的是你要加密啊。。。

你的意思是“不加密就保存,放在哪里都不安全”?

#3


引用 1 楼 zc881124 的回复:
我觉得放在哪不是最 主要的,最主要的是你要加密啊。。。

黑客直接入侵服务器的情况先不谈,我想问的是:application会不会被用户的浏览器直接获取到?如果你不在jsp页里写<%= application.getAttribute(""); %>类似的东西的话

#4


先不说安不安全的问题,是不好,像 Session 正经开发的时候,都不常用到,因为服务器内存是有限的,如果真的有很多东西要存在 Session 中,也会重写 Session ,不会选择放在内存里,会选择放在 Memcached 或者其它非关系型数据库中。
Application 是全局共享的,也是存储在内存里,你可以认为所有人都能访问 application 存放的东西,它比 Session 范围更大。如果 Application 里存放的变量无上限,那这种做法是很致命的,会且一定会在某一个时刻让你的系统爆掉。
这就是不谈黑客入侵,单纯只说使用这个的局限性。
以上

#5


还有你说的用户浏览器直接获取到的什么鬼。 不会!
浏览器是有标准的,它不负责解析你的模板,你的模板始终是你服务器解析,浏览器只负责,而且仅仅负责解析你的 Html 代码。所以你服务器返回给浏览器的,只能是 Html 代码。你所用到的 JSP 是模板引擎,它的作用是将你的 JSP 动态代码,转换成 Html 返回给客户端,也就是浏览器。

#6


引用 5 楼 javaloverkehui 的回复:
还有你说的用户浏览器直接获取到的什么鬼。 不会!
浏览器是有标准的,它不负责解析你的模板,你的模板始终是你服务器解析,浏览器只负责,而且仅仅负责解析你的 Html 代码。所以你服务器返回给浏览器的,只能是 Html 代码。你所用到的 JSP 是模板引擎,它的作用是将你的 JSP 动态代码,转换成 Html 返回给客户端,也就是浏览器。

#7


/没有安全不全,那要看你的数据发挥什么养的作用了》》》》》page:当前页面,也就是只要跳到别的页面就失效了
request:一次会话,简单的理解就是一次请求范围内有效
session:浏览器进程,只要当前页面没有被关闭(没有被程序强制清除),不管怎么跳转都是有效的
application:服务器,只要服务器没有重启(没有被程序强制清除),数据就有效

#8


引用 4 楼 javaloverkehui 的回复:
先不说安不安全的问题,是不好,像 Session 正经开发的时候,都不常用到,因为服务器内存是有限的,如果真的有很多东西要存在 Session 中,也会重写 Session ,不会选择放在内存里,会选择放在 Memcached 或者其它非关系型数据库中。
Application 是全局共享的,也是存储在内存里,你可以认为所有人都能访问 application 存放的东西,它比 Session 范围更大。如果 Application 里存放的变量无上限,那这种做法是很致命的,会且一定会在某一个时刻让你的系统爆掉。
这就是不谈黑客入侵,单纯只说使用这个的局限性。
以上

那我在application中只储存一些简单的配置,可以吗?比如微信公众平台的appid和secret等,就是把application当成一个配置文件用

#9


引用 5 楼 javaloverkehui 的回复:
还有你说的用户浏览器直接获取到的什么鬼。 不会!
浏览器是有标准的,它不负责解析你的模板,你的模板始终是你服务器解析,浏览器只负责,而且仅仅负责解析你的 Html 代码。所以你服务器返回给浏览器的,只能是 Html 代码。你所用到的 JSP 是模板引擎,它的作用是将你的 JSP 动态代码,转换成 Html 返回给客户端,也就是浏览器。

为啥我会有这个疑问,因为在后台application对象可以由request获取,我知道浏览器不会解析jsp模板,但我担心服务器会不会把application的信息放在response中之类的。

#10


引用 4 楼 javaloverkehui 的回复:
先不说安不安全的问题,是不好,像 Session 正经开发的时候,都不常用到,因为服务器内存是有限的,如果真的有很多东西要存在 Session 中,也会重写 Session ,不会选择放在内存里,会选择放在 Memcached 或者其它非关系型数据库中。
Application 是全局共享的,也是存储在内存里,你可以认为所有人都能访问 application 存放的东西,它比 Session 范围更大。如果 Application 里存放的变量无上限,那这种做法是很致命的,会且一定会在某一个时刻让你的系统爆掉。
这就是不谈黑客入侵,单纯只说使用这个的局限性。
以上

还想请教一个问题:正经开发的时候,全局的配置一般会加载到哪里?放在某一个类的static变量中吗?

#11


引用 10 楼 Mikuru_Beam 的回复:
Quote: 引用 4 楼 javaloverkehui 的回复:

先不说安不安全的问题,是不好,像 Session 正经开发的时候,都不常用到,因为服务器内存是有限的,如果真的有很多东西要存在 Session 中,也会重写 Session ,不会选择放在内存里,会选择放在 Memcached 或者其它非关系型数据库中。
Application 是全局共享的,也是存储在内存里,你可以认为所有人都能访问 application 存放的东西,它比 Session 范围更大。如果 Application 里存放的变量无上限,那这种做法是很致命的,会且一定会在某一个时刻让你的系统爆掉。
这就是不谈黑客入侵,单纯只说使用这个的局限性。
以上

还想请教一个问题:正经开发的时候,全局的配置一般会加载到哪里?放在某一个类的static变量中吗?

放哪里都可以,比如弄一个 properties 加载进 spring 的容器中。比如你说的静态对象声明。但是不会往 application 里放,很奇怪,没这么做过,也不会这么做,至于原因,一时说不上来,很别扭,通常有这样不舒服的感觉,就不会这么做,相信大多数人也不会这么做。

#12


引用 9 楼 Mikuru_Beam 的回复:
Quote: 引用 5 楼 javaloverkehui 的回复:

还有你说的用户浏览器直接获取到的什么鬼。 不会!
浏览器是有标准的,它不负责解析你的模板,你的模板始终是你服务器解析,浏览器只负责,而且仅仅负责解析你的 Html 代码。所以你服务器返回给浏览器的,只能是 Html 代码。你所用到的 JSP 是模板引擎,它的作用是将你的 JSP 动态代码,转换成 Html 返回给客户端,也就是浏览器。

为啥我会有这个疑问,因为在后台application对象可以由request获取,我知道浏览器不会解析jsp模板,但我担心服务器会不会把application的信息放在response中之类的。

打开 firefox, firebug ,网络,访问一个链接,你看看 response 里有什么

推荐阅读
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
author-avatar
chen-yu2502881617
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有