Spring获取Web应用根目录的方法

 Spring 在 org.springframework.web.util 包中提供了几个特殊用途的 Servlet 监听器,正确地使用它们可以完成一些特定需求的功能。

比如某些第三方工具支持通过 ${key} 的方式引用系统参数(即可以通过 System.getProperty() 获取的属性),

WebAppRootListener 可以将 Web 应用根目录添加到系统参数中,对应的属性名可以通过名为“webAppRootKey”的 Servlet 上下文参数指定,

默认为“webapp.root”。下面是该监听器的具体的配置:

<context-param> 
        <param-name>webAppRootKey</param-name>  
        <param-value>web.root</param-value> 
    </context-param> 
    <listener>  
        <listener-class>org.springframework.web.util.WebAppRootListener</listener-class>  
    </listener>

这样,您就可以在程序中通过 System.getProperty("baobaotao.root") 获取 Web 应用的根目录了。不过更常见的使用场景是在第三方工具的配置文件中通过 ${baobaotao.root} 引用 Web 应用的根目录。比如以下的 log4j.properties 配置文件就通过 ${baobaotao.root} 设置了日志文件的地址:

log4j.rootLogger=INFO,R log4j.appender.R=org.apache.log4j.RollingFileAppender 
log4j.appender.R.File=${web.root}/WEB-INF/logs/log4j.log ① 指定日志文件的地址 
log4j.appender.R.MaxFileSize=100KB log4j.appender.R.MaxBackupIndex=1 
log4j.appender.R.layout.ConversionPattern=%d %5p [%t] (%F:%L) - %m%n

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot应用程序中,可以使用Java的KeyStore类加载证书文件,并将其作为信任存储库添加到SSLContext中。以下是一些示例代码,可以在Spring Boot应用程序中加载根证书: ```java import org.springframework.boot.web.server.Ssl; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; import javax.net.ssl.SSLContext; import java.io.InputStream; import java.security.KeyStore; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; @Configuration public class SSLConfig { @Bean public Ssl ssl() throws Exception { Ssl ssl = new Ssl(); ssl.setKeyStore(this.loadKeyStore()); ssl.setKeyStorePassword("password"); ssl.setTrustStore(this.loadKeyStore()); ssl.setTrustStorePassword("password"); return ssl; } private KeyStore loadKeyStore() throws Exception { KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); try (InputStream is = new ClassPathResource("keystore.jks").getInputStream()) { keyStore.load(is, "password".toCharArray()); } return keyStore; } @Bean public SSLContext sslContext() throws Exception { CertificateFactory cf = CertificateFactory.getInstance("X.509"); try (InputStream is = new ClassPathResource("ca-cert.pem").getInputStream()) { X509Certificate cert = (X509Certificate) cf.generateCertificate(is); KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); trustStore.load(null, null); trustStore.setCertificateEntry("caCert", cert); SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, new TrustManager[]{new X509TrustManager() { public void checkClientTrusted(X509Certificate[] x509Certificates, String s) { } public void checkServerTrusted(X509Certificate[] x509Certificates, String s) { } public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[]{cert}; } }}, null); return sslContext; } } } ``` 这个代码片段假设你有一个名为 `keystore.jks` 的Java密钥库文件和一个名为 `ca-cert.pem` 的根证书文件应用程序的类路径中。它将 `keystore.jks` 文件加载到KeyStore实例中,并将其用作KeyStore和TrustStore。它还将 `ca-cert.pem` 文件加载到证书工厂中,并将其添加到TrustStore中。最后,它创建一个SSLContext实例,并将其初始化为使用新的TrustManager,该TrustManager接受根证书作为信任的证书。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值