实现项目部署包仅能在指定服务器部署,不可更改。更换位置,无法正常启动和访问。目前还没有完美的解决方案,有些思路还待验证。
校验规则
校验当前服务器mac地址是否匹配
启动报错提示
方案1:自定义servlet,load-on-startup设置为0,在init方法中校验
方案2:定义ServletContextListener,在contextInitialized方法中校验
可考虑在校验失败的情况下删除项目文件。该方案通过修改配置文件,从而屏蔽掉校验,安全级别不高
禁止非指定server部署访问
为了禁止非指定server部署访问,可在action层、service层进行校验,校验失败返回状态信息。
Action层校验:AOP实现,cglib动态代理,@before中进行校验,校验失败抛出自定义异常,配置自定义异常友好提示页面。但是像启动报错提示一样,也可通过修改配置文件屏蔽校验,且不影响使用,安全级别不高。
Service层校验:代理实现(静态代理、JDK代理、cglib代理),静态代理需要很多代理类,后两者需要使用spring集成,因为如果项目已使用代理(例如事务、日志),自定义代理类实际代理的是spring已代理后的类,无法代理成功(不知道是否特殊处理后可以,但明显不是一个好的方案)。和Action层校验一样,也存在修改配置文件屏蔽校验的问题。
最小硬编码非配置文件实现
在Action层取消依赖注入机制,通过自定义FactoryBean间接获取Service层对象,校验失败捕获异常。代码如下:
public static Object getBean(Class cl) throws NoAssessException{
Object bean=null;
if(AssessUtils.isAssess()){
bean=SpringContextUtils.getBean(cl);//从spring容器里获取bean对象
bean=context.getBean(cl);
}else{
throw new NoAssessException("This server cannot run this service.");
}
return bean;
}
service调用:
HelloWorldService helloWorldService=(HelloWorldService)FactoryBean
.getBean(HelloWorldService.class);
helloWorldService.helloWorld();
因为使用了自定义异常,无法在action层作为私有属性初始化service,只能在具体方法中初始化并捕获异常,增加了类代码量。好处在于明确问题原因,并给予友好提示。
改进方案:校验时不抛出异常,使其可作为变量定义,减少action层具体方法中重复获取service对象。缺点在于异常状态为空指针异常,无法给予友好提示。
缺点:1、改变了常用的依赖注入的对象调用方式;2、service层校验需要过action层;3、反编译源码后,也很容易全局屏蔽掉校验
待验证方案
以上方案安全级别都不高,以mac地址等对类文件进行加密,自定义类加载器以当前server的mac进行解密,这样是否会好一些。
需要解决的问题:1、如何自动进行类加密(工具类手动可以,希望有更好的方案);2、如何全局引入自定义类加载器,最好可以集成在spring中。
接下来有空研究,以下两篇Classloader的文章可以参考:
http://www.inter12.org/archives/702
http://bingobird.iteye.com/blog/606116
已验证:未完美解决
http://sheungxin.iteye.com/blog/2352833
分享到:
相关推荐
该小程序可实现web项目的单机自动发布、集群自动发布。 原理:从svn down代码、ant编译、打包项目、上传zip包、代码同步、解压、重启web容器 由于开发的比较着急,代码写的有点乱、忘谅解,仅供参考。 代码分为两...
"Solr单机部署" Solr是一个全文检索服务器,它基于Lucene实现,Solr只需要进行配置就可以实现全文检索服务。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。 1....
- **应用体系结构**:支持集中式结构、客户/服务器结构、Web浏览器/Web应用服务器/数据库服务器多层结构等应用体系结构。 - **存储结构**:实现了可扩展的逻辑和物理双层存储结构管理。 - **数据容量**:支持的...
接着,以单机版应用服务器和 WEB 服务器为例,通过双击 $WEBSPHERE_HOME/WAS 目录下的 `install.exe` 文件启动安装向导。 在安装过程中,重要的一环是为 WebSphere 的管理控制台添加一个管理用户,这是后期管理和...
在许多Web应用程序的初始阶段,通常采用单机部署以简化运维和快速上线。然而,随着业务的增长和技术架构的演进,单机部署逐渐无法满足高可用性和扩展性的需求,此时就需要转向多机部署。在多机部署中,如何实现...
该项目利用了基于springboot + vue + mysql的开发模式框架实现的课设系统,包括了项目的源码资源、sql文件、相关指引文档等等。 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理...
随着互联网技术的发展,OA系统从早期的单机版逐渐转变为基于Web的网络版,这不仅降低了系统的部署和维护成本,也使得远程办公成为可能。 2.2 OA管理系统的发展趋势 现代OA系统正朝着更智能、更协同的方向发展,...
【Java单机唱片管理系统】是...综上所述,这个Java单机唱片管理系统涵盖了Web应用开发的多个方面,包括后端编程、数据库设计、前端展示以及项目管理等多个知识点,对于学习和提升Java Web开发技能是非常有价值的案例。
对于大多数情况来说,推荐采用**单机版应用服务器和WEB服务器**的安装选项。这种方式适用于大多数场景,尤其是初学者或小规模项目。在安装过程中,会出现安装向导来引导完成每一步骤,包括选择安装路径、配置服务器...
与普通的 Spring 项目相比,Spring Boot 可以简化项目的配置和编码,使项目部署更方便,而且它还为开发人员提供了“开箱即用”的良好体验,可以进一步提升开发效率。 Spring Boot 正在成为越来越流行的开发框架。从...
SkyWalking 的单机部署非常简单,仅需按照以下步骤进行操作: 1. 下载 SkyWalking 的发行包 2. 解压缩发行包到指定的目录 3. 配置 application.yml 文件 4. 启动 SkyWalking 服务器 集群部署 SkyWalking 的集群...
Web网站架构的演变是一个逐步复杂化的过程,从最初的单机架构到分布式、微服务架构,目的是为了应对不断增长的用户需求和数据规模,提高系统的性能、稳定性和可扩展性。每个阶段都是对前一阶段问题的解决和优化,...
6. **分布式存储**:随着用户量的增长,单机存储可能无法满足需求,项目可能引入Hadoop、HDFS或云存储服务,实现文件的分布式存储。 7. **安全性**:文件传输应加密,防止数据泄露;同时,系统需要防止SQL注入、XSS...
在实现过程中,初学者还需要学习和理解版本控制工具(如Git),使用IDE(如PyCharm、Visual Studio Code)进行开发,以及部署应用到服务器(如使用Docker容器化部署,或者配置Apache、Nginx等Web服务器)。...
单机部署适用于开发、测试环境或用户数量较少的情况。在这种情况下,所有 ArcGIS Server 组件(包括服务对象管理器 SOM 和服务对象容器 SOC)可以安装在同一台计算机上。 - **特点**: - 简化部署和维护过程。 - ...
通过利用MatLab在科学计算与图形展示方面的强大功能,结合Web技术,可以实现高效、直观的教学资源。这种基于B/S模式的应用不仅便于维护和更新,还能够满足不同平台用户的访问需求,展现了MatLab在远程教学领域中的...
10. **部署**:了解如何将项目部署到云服务器,如AWS、阿里云或腾讯云,以供外部访问。 通过"学生信息管理"这样的项目实践,初学者可以全面掌握B/S架构的开发流程,从需求分析、设计、编码到测试和维护,提升综合...
7. **Maven或Gradle**:这些是项目构建工具,能帮助管理项目的依赖关系和构建过程。学习如何配置POM.xml或build.gradle文件,以及如何执行构建任务。 8. **版本控制**:Git是常用的版本控制系统,用于团队协作和...
3. Web界面:为了实现可视化监控和管理,项目可能会包含一个Web界面,展示实时指标,如数据速率、处理延迟、任务状态等,便于运营和维护。 4. 结果存储:处理后的结果通常会存储到数据库(如HBase、Cassandra)或者...