jre添加https证书

自己新建https证书,以及使用其他人的https

  1. 自己新建证书:输入如下命令:keytool -genkey -alias ssodemo -keyalg RSA -keysize 1024 -keypass zhoubang -validity 365 -keystore E:\zhoubang.keystore -storepass 123456中间的内容参数自己替换

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    各参数含义:
    -genkeypair 生成密钥
    -keyalg 指定密钥算法,这时指定RSA,
    -keysize 指定密钥长度,默认是1024位,这里指定2048,长一点,我让你破解不了(哈哈...),
    -siglag 指定数字签名算法,这里指定为SHA1withRSA算法
    -validity 指定证书有效期,这里指定36500天,也就是100年,我想我的应用用不到那么长时间
    -alias 指定别名,这里是ssodemo
    -keystore 指定密钥库存储位置,这里存在d盘
    -dname 指定用户信息,不用一个一个回答它的问题了;
    【注意】:第一个让你输入的“您的名字与姓氏是什么”,请必须输入在C:\Windows\System32\drivers\etc\hosts文件中加入的服务端的域名。
    我这里也就是server.zhoubang85.com,为何这么做?
    首先cas只能通过域名来访问,不能通过ip访问,同时上方是生成证书,所以要求比较严格,所以如果不这么做的话,及时最终按照教程配置完成,cas也可以正常访问,访问一个客户端应用虽然能进入cas验证首页,但是,当输入信息正确后,cas在回调转入你想访问的客户端应用的时候,会出现No subject alternative names present错误异常信息,这个错误也就是在上面输入的第一个问题答案不是域名导致、或者与hosts文件配置的不一致导致。
  2. 导出数字证书:在cmd下输入如下命令:keytool -exportcert -alias cas.server.com -keystore d:/tomcat.keystore -file d:/tomcat.cer -rfc

    1
    导出数字证书,即根据刚才生成的tomcat.keystore文件生成一个tomcat.cer文件,在生成的过程中输入的密码也是123456
  3. 配置tomcat的https证书

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    配置cas服务器tomcat
    将tomcat中server.xml中的连接器配置改为:
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
    maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
    clientAuth="false" sslProtocol="TLS" keystoreFile="tomcat.keystore"
    keystorePass="123456"/>
    同时将生成的tomcat.keystore复制到tomcat的主目录下,即与conf目录在同一个目录下;
    启动tomcat,然后访问https://cas.server.com:8443/cas 可以访问的只是有警告,因为浏览器没有进行证书认证。
    我们可以将生成的tomcat.cer导入到浏览器中,不导入也可以;如果要导入的,各个浏览器不导也步骤大体相似,以IE浏览器为例:
    点击 工具->Internet选项->内容->证书->受信任的根证书颁发机构->导入->下一步->浏览->选择d:/tomcat.cer->下一步,一路确认下去,直到证书导入成功。
    如果导入在受信任的根证书颁发机构 中可以找到名字为cas.server.com的证书.
    至此cas服务器商配置完毕.
  4. 证书导入java中的cacerts证书库:keytool -import -alias cacerts -keystore {java路径\jre\lib\security\cacerts} -file {证书路径.cer} -trustcacerts

    1
    2
    3
    此时命令行会提示你输入cacerts证书库的密码,
        你敲入changeit就行了,这是java中cacerts证书库的默认密码,
        你自已也可以修改的。
  5. 以后更新时,先删除原来的证书,然后导入新的证书

    keytool -list -keystore cacerts
    keytool -delete -alias akazam_email -keystore cacerts
    keytool -import -alias akazam_email -file akazam_email.cer -keystore cacerts -trustcacerts
  6. 使用网站上的证书时候

    1
    2
    3
    4
    5
    6
    进入某个https://www.xxx.com开头的网站,把要导入的证书下载过来,
        在该网页上右键 >> 属性 >> 点击"证书" >>
        再点击上面的"详细信息"切换栏 >>
        再点击右下角那个"复制到文件"的按钮
        就会弹出一个证书导出的向导对话框,按提示一步一步完成就行了。
        例如:保存为abc.cer,放在C盘下

log4j2的使用和配置项说明

log4j2结合springboot

初始化项目

  1. pom文件引入
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
          <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>
    -- 一下distuptor需要根据log4j2的配置。是否需要异步输入日志来判断
    <dependency>
    <groupId>com.lmax</groupId>
    <artifactId>disruptor</artifactId>
    <version>3.4.2</version>
    </dependency>
  2. 文档地址springboot logger 4.4.6章节

demo文件

  1. 文件默认加载:log4j2-spring.xml or log4j2.xml 。这里推荐使用前者
  2. 配置演示文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    <?xml version="1.0" encoding="UTF-8"?>
    <!--设置log4j2的自身log级别为ERROR-->
    <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
    <!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
    <!--monitorInterval:监控间隔,例如:monitorInterval=”600” 指log4j2每隔600秒(10分钟),自动监控该配置文件是否有变化,如果变化,则自动根据文件内容重新配置-->
    <configuration status="INFO" monitorInterval="30">
    <Properties>
    <!-- 配置日志文件输出目录 -->
    <Property name="LOG_HOME">E:\\work\\logs</Property>
    <Property name="LOG_BUSINESS_LEVEL">INFO</Property>
    <Property name="LOG_LEVEL">INFO</Property>
    <Property name="LOG_SQL_LEVEL">TRACE</Property>
    </Properties>

    <!--先定义所有的appender-->
    <appenders>

    <!--这个输出控制台的配置-->
    <Console name="Console" target="SYSTEM_OUT">
    <!--输出日志的格式-->
    <PatternLayout pattern="%d [%t] %-5p [%c] - %m%n"/>
    </Console>

    <!--business的日志记录追加器-->
    <RollingRandomAccessFile name="businessFile" fileName="${LOG_HOME}/leke-business.log" immediateFlush="false" append="true"
    filePattern="${LOG_HOME}/business-%d{yyyy-MM-dd}-%i.log.gz">
    <PatternLayout pattern="%d [%t] %-5p [%c] - %m%n"/>
    <!-- 该日志文件只会打印INFO等级的日志 -->
    <Filters>
    <!--WARN(含WARN)以上的级别信息直接拒绝,WARN以下交由下一个过滤器-->
    <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
    <!--接收上一个过滤器来的内容:大于DEBUG信息通过,低于INFO信息的拒绝-->
    <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY" />
    </Filters>
    <Policies>
    <SizeBasedTriggeringPolicy size="1000 MB"/>
    <TimeBasedTriggeringPolicy/>
    </Policies>
    </RollingRandomAccessFile >

    <!--exception的日志记录追加器-->
    <RollingRandomAccessFile name="exceptionFile" fileName="${LOG_HOME}/exception.log" immediateFlush="false" append="true"
    filePattern="${LOG_HOME}/exception-%d{yyyy-MM-dd}-%i.log.gz">
    <!--WARN(含WARN)以上的级别信息通过,低于WARN的拒绝执行-->
    <Filters>
    <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
    </Filters>
    <PatternLayout pattern="%d [%t] %-5p [%c] - %m%n"/>
    <Policies>
    <SizeBasedTriggeringPolicy size="1000 MB"/>
    <TimeBasedTriggeringPolicy/>
    </Policies>
    </RollingRandomAccessFile >

    <Async name="Async">
    <appender-ref ref="Console"/>
    <appender-ref ref="businessFile"/>
    <appender-ref ref="exceptionFile"/>
    </Async>

    </appenders>

    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
    <loggers>
    <root level="WARN">
    <appender-ref ref="Async"/>
    </root>
    <!--这个是异步输出日志文件。性能高,添加该项依赖要加入disruptor包-->
    <AsyncLogger name="com.alibaba.nacos.client.naming" level="info" additivity="false">
    <appender-ref ref="Console"/>
    </AsyncLogger>
    <!--同步输出日志文件。-->
    <Logger name="com.example.demo.controller" level="WARN" additivity="false">
    <appender-ref ref="Console"/>
    <appender-ref ref="businessFile"/>
    <appender-ref ref="exceptionFile"/>
    </Logger>
    </loggers>
    </configuration>

结合springboot的使用

  1. springboot中的YML文件配置优先级高于log4j2.xml 可以在YML配置多环境多配置
  2. YML有以下配置。那么整体的日志级别是INFO。非上面XML中配置的WARN。同时controller也一样是info级别的日志也会输出
    1
    2
    3
    4
    5
    6
    7
    logging:
    level:
    root: INFO
    com:
    example:
    demo:
    controller: INFO

配置项说明

  1. onMatch和onMismatch都有三个属性值,分别为Accept、DENY和NEUTRAL
  2. 分别介绍这两个配置项的三个属性值:
    1
    2
    3
    4
    5
    6
    onMatch="ACCEPT" 表示匹配该级别及以上
    onMatch="DENY" 表示不匹配该级别及以上
    onMatch="NEUTRAL" 表示该级别及以上的,由下一个filter处理,如果当前是最后一个,则表示匹配该级别及以上
    onMismatch="ACCEPT" 表示匹配该级别以下
    onMismatch="NEUTRAL" 表示该级别及以下的,由下一个filter处理,如果当前是最后一个,则不匹配该级别以下的
    onMismatch="DENY" 表示不匹配该级别以下的

log4j平滑升级log4j2

log4j升级

  • log4j在异步日志打印下性能极大提升,好处多多
  1. log4j2可以选择异步与同步日志打印.使用异步打印必须配置disruptor包

    1
    2
    3
    4
    5
               <dependency>
    <groupId>com.lmax</groupId>
    <artifactId>disruptor</artifactId>
    <version>3.4.2</version>
    </dependency>
  2. log4j2的xml配置中有AsyncLogger和Logger配置区别。Async就是异步配置

  3. log4j2有包架构不匹配。当原有系统不方便需改时。可以使用桥接包

    1
    2
    3
    4
    5
    <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-1.2-api</artifactId>
    <version>2.13.0</version>
    </dependency>
  4. 参考其他文章

java性能调试工具

jvm中常用工具和命令

  1. jstack – 如果Java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到 当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。目前只有在Solaris和Linux的JDK版本里面才有。

  2. jconsole – jconsole是基于Java Management Extensions (JMX)的实时图形化监测工具,这个工具利用了内建到JVM里面的JMX指令来提供实时的性能和资源的监控,包括了Java 程序的内存使用,Heap size, 线程的状态,类的分配状态和空间使用等等。

  3. jvisualvm-最新出现的功能强大的工具

  4. jinfo – jinfo可以从core文件里面知道崩溃的Java应用程序的配置信息,目前只有在Solaris和Linux的JDK版本里面才有。

  5. jmap – jmap 可以从core文件或进程中获得内存的具体匹配情况,包括Heap size, Perm size等等,目前只有在Solaris和Linux的JDK版本里面才有。

  6. jdb – jdb 用来对core文件和正在运行的Java进程进行实时地调试,里面包含了丰富的命令帮助您进行调试,它的功能和Sun studio里面所带的dbx非常相似,但 jdb是专门用来针对Java应用程序的。

  7. jstat – jstat利用了JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控等等。

  8. jps – jps是用来查看JVM里面所有进程的具体状态, 包括进程ID,进程启动的路径等等。

具体使用

  1. jmap的使用.pid 使用ps命令获取

    1
    2
    3
    4
    5
    6
    7
    8
    9
    1. 查看整个JVM内存状态 
    jmap -heap [pid]
    要注意的是在使用CMS GC 情况下,jmap -heap的执行有可能会导致JAVA 进程挂起

    2. 查看JVM堆中对象详细占用情况
    jmap -histo [pid]

    3. 导出整个JVM 中内存信息
    jmap -dump:format=b,file=文件名 [pid]
  2. jstat的具体使用

    • option: 参数选项
    • -t: 可以在打印的列加上Timestamp列,用于显示系统运行的时间
    • -h: 可以在周期性数据数据的时候,可以在指定输出多少行以后输出一次表头
    • vmid: Virtual Machine ID( 进程的 pid)
    • interval: 执行每次的间隔时间,单位为毫秒
    • count: 用于指定输出多少次记录,缺省则会一直打印

    option 可以从下面参数中选择

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    -class                 显示ClassLoad的相关信息;
    -compiler 显示JIT编译的相关信息;
    -gc 显示和gc相关的堆信息;
    -gccapacity    显示各个代的容量以及使用情况;
    -gcmetacapacity 显示metaspace的大小
    -gcnew 显示新生代信息;
    -gcnewcapacity 显示新生代大小和使用情况;
    -gcold 显示老年代和永久代的信息;
    -gcoldcapacity 显示老年代的大小;
    -gcutil   显示垃圾收集信息;
    -gccause 显示垃圾回收的相关信息(通-gcutil),同时显示最后一次或当前正在发生的垃圾回收的诱因;
    -printcompilation 输出JIT编译的方法信息;
  • 示例一:-class

    1
    2
    3
    4
    5
    6
    7
    显示加载class的数量,及所占空间等信息。
    jstat -class <pid>
    Loaded : 已经装载的类的数量
    Bytes : 装载类所占用的字节数
    Unloaded:已经卸载类的数量
    Bytes:卸载类的字节数
    Time:装载和卸载类所花费的时间
  • 示例二: -compiler

    1
    2
    3
    4
    5
    6
    7
    8
    显示VM实时编译(JIT)的数量等信息。
    jstat -compiler <pid>
    Compiled:编译任务执行数量
    Failed:编译任务执行失败数量
    Invalid :编译任务执行失效数量
    Time :编译任务消耗时间
    FailedType:最后一个编译失败任务的类型
    FailedMethod:最后一个编译失败任务所在的类及方法
  • 示例三: -gc

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

    显示gc相关的堆信息,查看gc的次数,及时间。
    jstat –gc <pid>

    S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
    S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
    S0U :年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
    S1U :年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
    EC :年轻代中Eden(伊甸园)的容量 (字节)
    EU :年轻代中Eden(伊甸园)目前已使用空间 (字节)
    OC :Old代的容量 (字节)
    OU :Old代目前已使用空间 (字节)
    MC:metaspace(元空间)的容量 (字节)
    MU:metaspace(元空间)目前已使用空间 (字节)
    YGC :从应用程序启动到采样时年轻代中gc次数
    YGCT :从应用程序启动到采样时年轻代中gc所用时间(s)
    FGC :从应用程序启动到采样时old代(全gc)gc次数
    FGCT :从应用程序启动到采样时old代(全gc)gc所用时间(s)
    GCT:从应用程序启动到采样时gc用的总时间(s)
  • 示例四: -gccapacity

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22

    可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小
    jstat -gccapacity <pid>

    NGCMN :年轻代(young)中初始化(最小)的大小(字节)
    NGCMX :年轻代(young)的最大容量 (字节)
    NGC :年轻代(young)中当前的容量 (字节)
    S0C :年轻代中第一个survivor(幸存区)的容量 (字节)
    S1C : 年轻代中第二个survivor(幸存区)的容量 (字节)
    EC :年轻代中Eden(伊甸园)的容量 (字节)
    OGCMN :old代中初始化(最小)的大小 (字节)
    OGCMX :old代的最大容量(字节)
    OGC:old代当前新生成的容量 (字节)
    OC :Old代的容量 (字节)
    MCMN:metaspace(元空间)中初始化(最小)的大小 (字节)
    MCMX :metaspace(元空间)的最大容量 (字节)
    MC :metaspace(元空间)当前新生成的容量 (字节)
    CCSMN:最小压缩类空间大小
    CCSMX:最大压缩类空间大小
    CCSC:当前压缩类空间大小
    YGC :从应用程序启动到采样时年轻代中gc次数
    FGC:从应用程序启动到采样时old代(全gc)gc次数
  • 示例五:-gcmetacapacity

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    metaspace 中对象的信息及其占用量。
    jstat -gcmetacapacity<pid>

    MCMN:最小元数据容量
    MCMX:最大元数据容量
    MC:当前元数据空间大小
    CCSMN:最小压缩类空间大小
    CCSMX:最大压缩类空间大小
    CCSC:当前压缩类空间大小
    YGC :从应用程序启动到采样时年轻代中gc次数
    FGC :从应用程序启动到采样时old代(全gc)gc次数
    FGCT :从应用程序启动到采样时old代(全gc)gc所用时间(s)
    GCT:从应用程序启动到采样时gc用的总时间(s)
  • 示例六: -gcnew

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    年轻代对象的信息。
    jstat -gcnew <pid>

    S0C :年轻代中第一个survivor(幸存区)的容量 (字节)
    S1C :年轻代中第二个survivor(幸存区)的容量 (字节)
    S0U :年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
    S1U :年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
    TT:持有次数限制
    MTT:最大持有次数限制
    DSS:期望的幸存区大小
    EC:年轻代中Eden(伊甸园)的容量 (字节)
    EU :年轻代中Eden(伊甸园)目前已使用空间 (字节)
    YGC :从应用程序启动到采样时年轻代中gc次数
    YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
  • 示例七: -gcnewcapacity

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    年轻代对象的信息及其占用量
    jstat -gcnewcapacity <pid>

    NGCMN :年轻代(young)中初始化(最小)的大小(字节)
    NGCMX :年轻代(young)的最大容量 (字节)
    NGC :年轻代(young)中当前的容量 (字节)
    S0CMX :年轻代中第一个survivor(幸存区)的最大容量 (字节)
    S0C :年轻代中第一个survivor(幸存区)的容量 (字节)
    S1CMX :年轻代中第二个survivor(幸存区)的最大容量 (字节)
    S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
    ECMX:年轻代中Eden(伊甸园)的最大容量 (字节)
    EC:年轻代中Eden(伊甸园)的容量 (字节)
    YGC:从应用程序启动到采样时年轻代中gc次数
    FGC:从应用程序启动到采样时old代(全gc)gc次数
  • 示例八: -gcold

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    old代对象的信息
    jstat -gcold <pid>

    MC :metaspace(元空间)的容量 (字节)
    MU:metaspace(元空间)目前已使用空间 (字节)
    CCSC:压缩类空间大小
    CCSU:压缩类空间使用大小
    OC:Old代的容量 (字节)
    OU:Old代目前已使用空间 (字节)
    YGC:从应用程序启动到采样时年轻代中gc次数
    FGC:从应用程序启动到采样时old代(全gc)gc次数
    FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
    GCT:从应用程序启动到采样时gc用的总时间(s)
  • 示例九:-gcoldcapacity

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    old代对象的信息及其占用量
    jstat -gcoldcapacity <pid>

    OGCMN :old代中初始化(最小)的大小 (字节)
    OGCMX :old代的最大容量(字节)
    OGC :old代当前新生成的容量 (字节)
    OC :Old代的容量 (字节)
    YGC :从应用程序启动到采样时年轻代中gc次数
    FGC :从应用程序启动到采样时old代(全gc)gc次数
    FGCT :从应用程序启动到采样时old代(全gc)gc所用时间(s)
    GCT:从应用程序启动到采样时gc用的总时间(s)
  • 示例十: - gcutil

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    统计gc信息
    jstat -gcutil <pid>

    S0 :年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
    S1 :年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
    E :年轻代中Eden(伊甸园)已使用的占当前容量百分比
    O :old代已使用的占当前容量百分比
    P :perm代已使用的占当前容量百分比
    YGC :从应用程序启动到采样时年轻代中gc次数
    YGCT :从应用程序启动到采样时年轻代中gc所用时间(s)
    FGC :从应用程序启动到采样时old代(全gc)gc次数
    FGCT :从应用程序启动到采样时old代(全gc)gc所用时间(s)
    GCT:从应用程序启动到采样时gc用的总时间(s)
  • 示例十一:-gccause

    1
    2
    3
    4
    5
    6
    显示垃圾回收的相关信息(通-gcutil),同时显示最后一次或当前正在发生的垃圾回收的诱因。
    jstat -gccause <pid>


    LGCC:最后一次GC原因
    GCC:当前GC原因(No GC 为当前没有执行GC)
  • 示例十二: -printcompilation

    1
    2
    3
    4
    5
    6
    7
    当前VM执行的信息。
    jstat -printcompilation <pid>

    Compiled :编译任务的数目
    Size :方法生成的字节码的大小
    Type:编译类型
    Method:类名和方法名用来标识编译的方法。类名使用/做为一个命名空间分隔符。方法名是给定类中的方法。上述格式是由-XX:+PrintComplation选项进行设置的

网络代理,访问限制网站

  1. 通过 命令行参数 指定

  2. 如果只需要考虑代理 HTTP 协议请求,只需添加如下命令行参数:

    -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=1080

  3. 想要 HTTP 和 HTTPS 协议的请求都通过代理访问网络,可以追加上:

    -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=1080

  4. 最终填写的值为:

    -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=1080 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=1080

议 属性(代理主机/代理端口/不使用代理的主机列表) 默认值
HTTP http.proxyHost
http.proxyPort 80
http.nonProxyHosts

HTTPS https.proxyHost
https.proxyPort 443
https.nonProxyHosts

FTP ftp.proxyHost
ftp.proxyPort 80
ftp.nonProxyHosts

SOCKS socksProxyHost
socksProxyPort 1080

android/cordova/splashscreen说明

配置说明

  1. 自动隐藏启动页面AutoHideSplashScreen(默认为:true)

    1
    <preference name="AutoHideSplashScreen" value="true" />
  2. 显示启动页面的时间长度SplashScreenDelay(默认为:3000)

    1
    2
    3
    <preference name="SplashScreenDelay" value="3000" />
    若想禁用启动页面,可设置为:<preference name="SplashScreenDelay" value="0"/>
    如果是iOS平台上想禁止启动页面,还需要添加<preference name="FadeSplashScreenDuration" value="0"/>
  3. 启动页面淡入淡出的效果

    1
    2
    3
    4
    5
    是否显示淡入淡出效果FadeSplashScreen(默认为:true)
    <preference name="FadeSplashScreen" value="false"/>
    淡入淡出效果的执行时间长度FadeSplashScreenDuration(默认为:500)
    <preference name="FadeSplashScreenDuration" value="750"/>
    注意:FadeSplashScreenDuration时间是包含在SplashScreenDelay的时间里的。
  4. 启动页面是否允许旋转(默认为:true)

    1
    2
    3
    4
    <preference name="ShowSplashScreenSpinner" value="false"/>
    插件还可以通过js代码调用,提供有以下两个方法:
    navigator.splashscreen.hide();//隐藏启动页面
    navigator.splashscreen.show();//显示启动页面
  5. 在Android平台下的特殊设置

    1
    2
    3
    4
    <preference name="SplashMaintainAspectRatio" value="true|false" />
    <preference name="SplashShowOnlyFirstTime" value="true|false" />
    SplashMaintainAspectRatio:选填项,默认为false。当设置为true时,则不会拉伸图片来填充屏幕,会以图片原始比例显示图片。
    SplashShowOnlyFirstTime:选填项,默认为true。当设置为false时,APP通过navigator.app.exitApp()代码退出app后,在下次打开APP时,还会显示启动页面。若为true时,就不会出现。

tomcat开启apr功能

启用apr模式步聚

安装依赖库

  1. 因为apr模式本质是使用JNI技术调用操作系统IO接口,需要用到相关API的头文件

    • yum install apr-devel
    • yum install openssl-devel
    • yum install gcc
    • yum install make
      1
      注意:openssl库要求在0.9.7以上版本,APR要求在1.2以上版本,用rpm -qa | grep openssl检查本机安装的依赖库版本是否大于或等于apr要求的版本。
  2. 安装apr动态库

    • 进入tomcat的bin目录,解压tomcat-native.tar.gz文件,并进入tomcat-native-1.2.7-src/native目录,执行./configure && make && make install 命令
      1
      apr如何openssh版本错误,手动指定安装目录: ./configure --with-apr=/usr/local/apr  --with-ssl=/usr/local/openssl
  3. 编辑$TOMCAT_HOME/bin/catalina.sh文件,在虚拟机启动参数JAVA_OPTS中添加java.library.path参数,指定apr库的路径

    • JAVA_OPTS=”$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib”
  4. Tomcat8以下版本,需要指定运行模式,将protocol从HTTP/1.1改成org.apache.coyote.http11.Http11AprProtocol

    1
    2
    3
    <Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
    connectionTimeout="20000"
    redirectPort="8443" />

apr和openssl版本错误

  1. apr安装
    1
    2
    3
    4
    tar zxvf apr-1.4.5.tar  
    cd apr-1.4.5
    ./configure --prefix=/usr/local/apr
    make && make install
  2. openssl安装
    1
    2
    3
    4
    tar -xvzf openssl-1.1.0e.tar.gz
    cd openssl-1.1.0e/
    ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl
    make && make install

tomcat开启远程war包上传工程

开启用户管理

  1. 编辑tomcat-user.xml文件 添加一下内容
    1
    2
    3
    <role rolename="manager-gui"/>
    <role rolename="manager-script"/>
    <user username="admin" password="admin" roles="manager-gui, manager-script"/>

添加后依然403无法访问

  1. manager 配置有问题,因为只允许本机访问所以其他人无法访问,
    1
    2
    3
    4
    5
    $TOMCAT_HOME/webapps/manager/META-INF/context.xml文件中
    <Context antiResourceLocking="false" privileged="true" >
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
    allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
    </Context>
  2. 只需加入本机ip即可,或者注释掉上面的语句
    1
    2
    3
    4
    <Context antiResourceLocking="false" privileged="true" >
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
    allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|10.0.1.143" />
    </Context>

中型系统的技术知识

需要掌握的系统知识

中级需要具备

技能图

进阶(高级系统,未学习)等待补充

  1. 中间件的大规模使用
  2. 双A
  3. 高可用