作者:chen-yu2502881617 | 来源:互联网 | 2023-05-18 02:39
如题,最近在研究微信公众号开发,我搭建了一个项目,然后在服务器启动时把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 个解决方案
先不说安不安全的问题,是不好,像 Session 正经开发的时候,都不常用到,因为服务器内存是有限的,如果真的有很多东西要存在 Session 中,也会重写 Session ,不会选择放在内存里,会选择放在 Memcached 或者其它非关系型数据库中。
Application 是全局共享的,也是存储在内存里,你可以认为所有人都能访问 application 存放的东西,它比 Session 范围更大。如果 Application 里存放的变量无上限,那这种做法是很致命的,会且一定会在某一个时刻让你的系统爆掉。
这就是不谈黑客入侵,单纯只说使用这个的局限性。
以上