From 433f998659008e1243d8022a166ef6e1dade6cc8 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Tue, 18 Mar 2014 14:13:31 +0000 Subject: [PATCH] Be defensive with possibly secured APIs --- .../boot/SpringApplication.java | 8 ++++++- .../boot/StartupInfoLogger.java | 7 +++++- .../logging/LoggingApplicationListener.java | 10 ++++++--- .../logging/logback/LogbackLoggingSystem.java | 22 ++++++++++++------- 4 files changed, 34 insertions(+), 13 deletions(-) diff --git a/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java b/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java index a59d19f3b2..415b199174 100644 --- a/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java +++ b/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java @@ -17,6 +17,7 @@ package org.springframework.boot; import java.lang.reflect.Constructor; +import java.security.AccessControlException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -281,7 +282,12 @@ public class SpringApplication { // Create, load, refresh and run the ApplicationContext context = createApplicationContext(); if (this.registerShutdownHook) { - context.registerShutdownHook(); + try { + context.registerShutdownHook(); + } + catch (AccessControlException e) { + // Not allowed in some environments. + } } context.setEnvironment(environment); postProcessApplicationContext(context); diff --git a/spring-boot/src/main/java/org/springframework/boot/StartupInfoLogger.java b/spring-boot/src/main/java/org/springframework/boot/StartupInfoLogger.java index 3d0cfc234a..68b8f011d1 100644 --- a/spring-boot/src/main/java/org/springframework/boot/StartupInfoLogger.java +++ b/spring-boot/src/main/java/org/springframework/boot/StartupInfoLogger.java @@ -89,7 +89,12 @@ class StartupInfoLogger { message.append(" in "); message.append(stopWatch.getTotalTimeSeconds()); message.append(" seconds (JVM running for "); - message.append(ManagementFactory.getRuntimeMXBean().getUptime() / 1000.0); + try { + message.append(ManagementFactory.getRuntimeMXBean().getUptime() / 1000.0); + } + catch (Throwable e) { + message.append("?"); + } message.append(")"); return message; } diff --git a/spring-boot/src/main/java/org/springframework/boot/logging/LoggingApplicationListener.java b/spring-boot/src/main/java/org/springframework/boot/logging/LoggingApplicationListener.java index f02b384ddc..7859457064 100644 --- a/spring-boot/src/main/java/org/springframework/boot/logging/LoggingApplicationListener.java +++ b/spring-boot/src/main/java/org/springframework/boot/logging/LoggingApplicationListener.java @@ -191,9 +191,13 @@ public class LoggingApplicationListener implements SmartApplicationListener { } private String getPid() { - String name = ManagementFactory.getRuntimeMXBean().getName(); - if (name != null) { - return name.split("@")[0]; + try { + String name = ManagementFactory.getRuntimeMXBean().getName(); + if (name != null) { + return name.split("@")[0]; + } + } + catch (Throwable e) { } return "????"; } diff --git a/spring-boot/src/main/java/org/springframework/boot/logging/logback/LogbackLoggingSystem.java b/spring-boot/src/main/java/org/springframework/boot/logging/logback/LogbackLoggingSystem.java index 9f7eb6e7eb..7e2d29ba52 100644 --- a/spring-boot/src/main/java/org/springframework/boot/logging/logback/LogbackLoggingSystem.java +++ b/spring-boot/src/main/java/org/springframework/boot/logging/logback/LogbackLoggingSystem.java @@ -66,15 +66,21 @@ public class LogbackLoggingSystem extends AbstractLoggingSystem { @Override public void beforeInitialize() { super.beforeInitialize(); - if (ClassUtils.isPresent("org.slf4j.bridge.SLF4JBridgeHandler", getClassLoader())) { - try { - SLF4JBridgeHandler.removeHandlersForRootLogger(); + try { + if (ClassUtils.isPresent("org.slf4j.bridge.SLF4JBridgeHandler", + getClassLoader())) { + try { + SLF4JBridgeHandler.removeHandlersForRootLogger(); + } + catch (NoSuchMethodError ex) { + // Method missing in older versions of SLF4J like in JBoss AS 7.1 + SLF4JBridgeHandler.uninstall(); + } + SLF4JBridgeHandler.install(); } - catch (NoSuchMethodError ex) { - // Method missing in older versions of SLF4J like in JBoss AS 7.1 - SLF4JBridgeHandler.uninstall(); - } - SLF4JBridgeHandler.install(); + } + catch (Throwable e) { + // Ignore. No java.util.logging bridge is installed. } }