`
sheungxin
  • 浏览: 103476 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如何实现web项目单机部署

阅读更多
  • 实现目标
实现项目部署包仅能在指定服务器部署,不可更改。更换位置,无法正常启动和访问。目前还没有完美的解决方案,有些思路还待验证。

  • 实现方案
校验规则

校验当前服务器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程序自动部署

    该小程序可实现web项目的单机自动发布、集群自动发布。 原理:从svn down代码、ant编译、打包项目、上传zip包、代码同步、解压、重启web容器 由于开发的比较着急,代码写的有点乱、忘谅解,仅供参考。 代码分为两...

    java课程设计:基于java实现的单机五子棋游戏的源代码.zip

    与普通的 Spring 项目相比,Spring Boot 可以简化项目的配置和编码,使项目部署更方便,而且它还为开发人员提供了“开箱即用”的良好体验,可以进一步提升开发效率。 Spring Boot 正在成为越来越流行的开发框架。从...

    JAVA上百实例源码以及开源项目源代码

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    JavaEE求职简历-姓名-JAVA开发工程师.docx

    熟悉 Linux 常用命令,熟练搭建 Windows、Linux、mac 系统下的服务部署,并实现软件的上架部署 熟悉 SVN、Git、Maven 等项目管理和项目构建工具 熟悉 JUnit 技术,通过 SpringText、DBunit、EasyMock 对项目进行单元...

    JAVA上百实例源码以及开源项目

    百度云盘分享 ... Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。  部分源代码摘录:  ftpClient = new FtpClient(); //实例化FtpClient对象  String serverAddr=jtfServer.getText();...

    Job Plus项目是基于SpringBoot+Vue的轻量级定时任务管理系统+源代码+文档说明

    18. 阻塞策略:调度过于密集执行器来不及处理时的处理策略,策略包括:单机串行(默认)、丢弃后续调度、覆盖之前调度; 19. 超时控制:支持自定义任务超时时间,任务运行超时将会主动中断任务; 20. 重试机制:支持...

    开涛高可用高并发-亿级流量核心技术

    13.5 异步Web服务实现 257 13.6 请求缓存 259 13.7 请求合并 261 14 如何扩容 266 14.1 单体应用垂直扩容 267 14.2 单体应用水平扩容 267 14.3 应用拆分 268 14.4 数据库拆分 271 14.5 数据库分库分表示例 275 ...

    DataX Web分布式数据同步工具-其他

    10、阻塞处理策略:调度过于密集执行器来不及处理时的处理策略,策略包括:单机串行(默认)、丢弃后续调度、覆盖之前调度; 11、任务超时控制:支持自定义任务超时时间,任务运行超时将会主动中断任务; 12、任务...

    springCloud

    系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。 微服务的概念源于2014年3月Martin Fowler所写的...

    java版斗地主源码-quan.zhou:quan.zhou

    筋斗云是一个Web接口开发框架,它基于模型驱动开发(MDD)的理念,提出极简化开发的“数据模型即接口”思想,用于快速实现基于数据模型的接口(MBI: Model Based Interface)。 它推崇以简约的方式在设计文档中描述...

    shield-conf:shield,基于Dubbo-RPC的分布式配置服务中心

    特性提供两种版本的配置方式,单机版直接添加依赖到项目中即可集成配置管理能力;分布式版本需要依赖zookeeper,基于dubbo实现了集群方式的配置管理能力。分布式版本分为C/S架构,客户端采用PULL模式定时更新配置,...

    RepChain许可链基础组件-其他

    RepChain(Reactive Permissioned Chain)是第一款采用响应式编程实现的自主可控的许可链基础组件,面向企业应用,强调交易的实时性和分布式环境下的柔韧性,且易于根据不同应用场景进行模块定制和弹性部署。...

    Eclipse开发分布式商城系统+完整视频代码及文档

    │ 03.redis单机版安装.avi │ 04.redis集群安装.avi │ 05.jedis客户端.avi │ 06.jedis客户端在spring中的配置.avi │ 07.测试spring中的JedisClient.avi │ 08.缓存同步-服务发布.avi │ 09.后台调用缓存同步服务...

    国内外主流的三维GIS软件

     介绍:数据地球(中国)(Data Earth China)是我国第一个集数据与软件一体化的三维地理空间信息系统,它在国家863计划地球观测与导航技术领域项目支持下,由中国资源卫星应用中心、视宝公司和北京星天地公司三家...

    一款非常好的WPF编程宝典2010 源代码

    15.5.5 SimpleStyle示例项目 398 15.6 结束语 400 第16章 数据绑定 401 16.1 数据绑定基础 401 16.1.1 绑定到元素的属性 401 16.1.2 使用代码创建绑定 404 16.1.3 多绑定 405 16.1.4 绑定方向 408 16.1.5 ...

    Apress.Pro.WPF.in.C.Sharp.2008.2nd.Edition.Feb.2008

    15.5.5 SimpleStyle示例项目 398 15.6 结束语 400 第16章 数据绑定 401 16.1 数据绑定基础 401 16.1.1 绑定到元素的属性 401 16.1.2 使用代码创建绑定 404 16.1.3 多绑定 405 16.1.4 绑定方向 408 16.1.5 绑定更新 ...

Global site tag (gtag.js) - Google Analytics