资讯专栏INFORMATION COLUMN

SSH+Tomcat运行加密部署的web项目(初版)

番茄西红柿 / 589人阅读

摘要:一般来说会在项目中的中添加一个,里面配置这个配置文件在部署时,会被复制到中去,并被重新命名为项目名。由于使用的项目中配置了来加载第三方库,配置了我自定义加载器后,这些包都无法加载了。我往开发机上打加密补丁的时候,总是无故消失,不知道为什么

为了这个功能提了很多问题都没能得到解答,最后终于自己搞定了,现在把大体步骤总结下,供大家参考指正

分三种情况:
(1)没有配置spring自动扫描
(2)2.5.*版本的spring
(3)3.*版本的spring

下面的内容只写了3.*spring版本的情况

先将class文件加密
然后写个解密的类加载器,继承自webappclassloader(项目需要引入catalina.jar,这个包位于tomcat的lib目录下),并配置到tomcat中去

tomcat中类加载器分为多层:

  Bootstrap
      |
   System
      |
   Common
   /     

Webapp1 Webapp2 ...
添加自定义类加载器的时候只需要继承webappclassloader就好了。
然后将编译好的class文件复制到{$Catalina_home}lib中去,这里要注意,如果包名为A.B,那么要在lib中新建这两个目录,也就是说...libABMywebappclassloader.class
lib包有commonclassloader加载,一般只用于加载Tomcat发布的标准jar包,其他的第三方jar包可以在catalina.properties中配置shared.loader,这里由于偷懒就直接放在lib下了,假装自己写了个第三方库。

-----然后配置元素
根据官方文档,有多个地方配置。
一般来说会在项目中的META-INF中添加一个context.xml,里面配置:




这个配置文件在部署时,会被复制到{$Catalina_home}confCatalinalocalhost中去,并被重新命名为:项目名.xml。

由于使用的项目中配置了


来加载第三方库,配置了我自定义加载器后,"../aaaa/*.jar" 这些jar包都无法加载了。
目前我的解决办法是注释掉


然后在mywebappclassloader中使用addRepository()方法添加jar路径(仓库),代码如下:

File jarDir=new File("E:front_tcaaaa");
        if(jarDir.isDirectory()){
            File[] jarFiles=jarDir.listFiles(new JarFileNameFilter());
            for(File jarFile:jarFiles){
                try {
                    addRepository(jarFile.toURI().toURL().toString());
                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

PS:

出自How Tomcat Works

最后在SSH框架下,由于在spring.xml中配置了自动扫描


所以a.b包下的类都会被spring自动加载
而spring自动加载时使用的类是SimpleMetadataReader,所以要改写他用于加载的类SimpleMetadataReader

这个类是spring核心包org.springframework.core-3.0.2.RELEASE.jar中的,我们不需要解压这个包然后替换SimpleMetadataReader.class这么麻烦,只需要在项目中建一个同名的类即可,部署到tomcat后会覆盖掉spring中的类。
建立org.springframework.core.type.classreading包,然后建一个SimpleMetadataReader类。随便去哪下spring的源码,然后复制过来改一下即可

写在最后:
对于要部署在linux的同学,记得把分隔符换成 System.getProperty("file.separator")。
我往开发机上打加密补丁的时候,web.xml总是无故消失,不知道为什么

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/35551.html

相关文章

  • SSH+Tomcat运行加密部署web项目初版

    摘要:一般来说会在项目中的中添加一个,里面配置这个配置文件在部署时,会被复制到中去,并被重新命名为项目名。由于使用的项目中配置了来加载第三方库,配置了我自定义加载器后,这些包都无法加载了。我往开发机上打加密补丁的时候,总是无故消失,不知道为什么 为了这个功能提了很多问题都没能得到解答,最后终于自己搞定了,现在把大体步骤总结下,供大家参考指正 分三种情况:(1)没有配置spring自动扫描(2...

    bergwhite 评论0 收藏0
  • 分布式任务调度平台自动化部署

    摘要:分布式任务调度平台,美团点评员工许雪里开发,其核心设计目标是开发迅速学习简单轻量级易扩展。源码地址二本文简介主要是利用成熟的部署工具,结合开源的分布式任务调度框架作为工程,快速搭建自己的持续集成项目,其他项目可以类似构建。 一、概述 1、自动化部署能简化开发过程的代码管理,让开发人员把更多的时间专注于业务实现, 简化繁琐的上线流程和操作步骤,做到项目的快速打包和部署,减少人...

    tomato 评论0 收藏0
  • 分布式任务调度平台自动化部署

    摘要:分布式任务调度平台,美团点评员工许雪里开发,其核心设计目标是开发迅速学习简单轻量级易扩展。源码地址二本文简介主要是利用成熟的部署工具,结合开源的分布式任务调度框架作为工程,快速搭建自己的持续集成项目,其他项目可以类似构建。 一、概述 1、自动化部署能简化开发过程的代码管理,让开发人员把更多的时间专注于业务实现, 简化繁琐的上线流程和操作步骤,做到项目的快速打包和部署,减少人...

    scq000 评论0 收藏0
  • 阿里云服务器部署Java Web项目全过程

    摘要:最近需要将一个项目部署到服务器上,方便多人共享访问。购买服务器第一步当然是需要购买一台服务器了,我选择的是阿里云的,对于新用户有一定的优惠活动。部署项目我需要将本地的工程打包成,以及将数据库导出至文件一并上传到服务器上。最近需要将一个Java Web项目部署到服务器上,方便多人共享访问。这也是我第一次接触服务器之类的东西,也花了一点时间,最终总算部署成功,写下一篇文章记录以便日后回顾。 购买...

    wua_wua2012 评论0 收藏0
  • Maven详细教程

    摘要:清理上一次执行创建的文件处理资源文件编译代码执行单元测试文件创建拷贝到本地的仓库下面发布生成文档将工程所有文档生成网站,生成的网站界面默认和的项目站点类似,但是其文档用格式写的,目前不支持,需要用其他插件配合才能支持。 前言 本文可以帮助你加深对Maven的整体认识,不是一篇基础文章。如果你现在还没有用 Maven 跑过 HelloWorld,那么本文可能不适合你。 一、Maven简介...

    Keagan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<