mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-09-03 04:26:12 +08:00
Polish
This commit is contained in:
parent
10f7031e46
commit
968b68c322
@ -135,14 +135,12 @@ public class MetricFilterAutoConfiguration {
|
||||
}
|
||||
|
||||
private boolean is4xxClientError(int status) {
|
||||
HttpStatus httpStatus = HttpStatus.OK;
|
||||
try {
|
||||
httpStatus = HttpStatus.valueOf(status);
|
||||
return HttpStatus.valueOf(status).is4xxClientError();
|
||||
}
|
||||
catch (Exception ex) {
|
||||
// not convertible
|
||||
return false;
|
||||
}
|
||||
return httpStatus.is4xxClientError();
|
||||
}
|
||||
|
||||
private String getKey(String string) {
|
||||
|
@ -44,11 +44,11 @@ import org.springframework.security.core.userdetails.UserDetailsService;
|
||||
import org.springframework.security.web.FilterChainProxy;
|
||||
import org.springframework.test.util.ReflectionTestUtils;
|
||||
import org.springframework.test.web.servlet.MockMvc;
|
||||
import org.springframework.test.web.servlet.ResultMatcher;
|
||||
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
||||
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
|
||||
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.context.WebApplicationContext;
|
||||
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
|
||||
|
||||
import static org.hamcrest.Matchers.greaterThan;
|
||||
@ -209,44 +209,36 @@ public class ManagementSecurityAutoConfigurationTests {
|
||||
PropertyPlaceholderAutoConfiguration.class);
|
||||
this.context.refresh();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders
|
||||
.webAppContextSetup((WebApplicationContext) this.context)
|
||||
.addFilters(
|
||||
this.context.getBean("springSecurityFilterChain", Filter.class))
|
||||
.build();
|
||||
|
||||
Filter filter = this.context.getBean("springSecurityFilterChain", Filter.class);
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(this.context)
|
||||
.addFilters(filter).build();
|
||||
|
||||
// no user (Main)
|
||||
mockMvc.perform(
|
||||
MockMvcRequestBuilders.get("/"))
|
||||
mockMvc.perform(MockMvcRequestBuilders.get("/"))
|
||||
.andExpect(MockMvcResultMatchers.status().isUnauthorized())
|
||||
.andExpect(
|
||||
MockMvcResultMatchers.header().string("www-authenticate",
|
||||
Matchers.containsString("realm=\"Spring\"")));
|
||||
.andExpect(springAuthenticateRealmHeader());
|
||||
|
||||
// invalid user (Main)
|
||||
mockMvc.perform(
|
||||
MockMvcRequestBuilders.get("/").header("authorization", "Basic xxx"))
|
||||
.andExpect(MockMvcResultMatchers.status().isUnauthorized())
|
||||
.andExpect(
|
||||
MockMvcResultMatchers.header().string("www-authenticate",
|
||||
Matchers.containsString("realm=\"Spring\"")));
|
||||
.andExpect(springAuthenticateRealmHeader());
|
||||
|
||||
// no user (Management)
|
||||
mockMvc.perform(
|
||||
MockMvcRequestBuilders.get("/beans"))
|
||||
mockMvc.perform(MockMvcRequestBuilders.get("/beans"))
|
||||
.andExpect(MockMvcResultMatchers.status().isUnauthorized())
|
||||
.andExpect(
|
||||
MockMvcResultMatchers.header().string("www-authenticate",
|
||||
Matchers.containsString("realm=\"Spring\"")));
|
||||
.andExpect(springAuthenticateRealmHeader());
|
||||
|
||||
// invalid user (Management)
|
||||
mockMvc.perform(
|
||||
MockMvcRequestBuilders.get("/beans").header("authorization", "Basic xxx"))
|
||||
.andExpect(MockMvcResultMatchers.status().isUnauthorized())
|
||||
.andExpect(
|
||||
MockMvcResultMatchers.header().string("www-authenticate",
|
||||
Matchers.containsString("realm=\"Spring\"")));
|
||||
.andExpect(springAuthenticateRealmHeader());
|
||||
}
|
||||
|
||||
private ResultMatcher springAuthenticateRealmHeader() {
|
||||
return MockMvcResultMatchers.header().string("www-authenticate",
|
||||
Matchers.containsString("realm=\"Spring\""));
|
||||
}
|
||||
|
||||
@EnableGlobalAuthentication
|
||||
@ -254,9 +246,8 @@ public class ManagementSecurityAutoConfigurationTests {
|
||||
static class AuthenticationConfig {
|
||||
@Autowired
|
||||
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
|
||||
auth
|
||||
.inMemoryAuthentication()
|
||||
.withUser("user").password("password").roles("USER");
|
||||
auth.inMemoryAuthentication().withUser("user").password("password")
|
||||
.roles("USER");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -116,26 +116,14 @@ abstract class BeanTypeRegistry {
|
||||
definition.getFactoryMethodName());
|
||||
Class<?> generic = ResolvableType.forMethodReturnType(method)
|
||||
.as(FactoryBean.class).resolveGeneric();
|
||||
if (generic == null || generic.equals(Object.class)) {
|
||||
generic = determineTypeFromDefinitionAttribute(factoryDefinition);
|
||||
if ((generic == null || generic.equals(Object.class))
|
||||
&& definition.hasAttribute(FACTORY_BEAN_OBJECT_TYPE)) {
|
||||
generic = getTypeFromAttribute(definition
|
||||
.getAttribute(FACTORY_BEAN_OBJECT_TYPE));
|
||||
}
|
||||
return generic;
|
||||
}
|
||||
|
||||
private Class<?> determineTypeFromDefinitionAttribute(BeanDefinition definition)
|
||||
throws ClassNotFoundException, LinkageError {
|
||||
if (definition.hasAttribute(FACTORY_BEAN_OBJECT_TYPE)) {
|
||||
Object attributeObject = definition.getAttribute(FACTORY_BEAN_OBJECT_TYPE);
|
||||
if (attributeObject instanceof Class<?>) {
|
||||
return (Class<?>) attributeObject;
|
||||
}
|
||||
else if (attributeObject instanceof String) {
|
||||
return ClassUtils.forName((String) attributeObject, null);
|
||||
}
|
||||
}
|
||||
return Object.class;
|
||||
}
|
||||
|
||||
private Class<?> getDirectFactoryBeanGeneric(
|
||||
ConfigurableListableBeanFactory beanFactory, BeanDefinition definition,
|
||||
String name) throws ClassNotFoundException, LinkageError {
|
||||
@ -143,12 +131,25 @@ abstract class BeanTypeRegistry {
|
||||
beanFactory.getBeanClassLoader());
|
||||
Class<?> generic = ResolvableType.forClass(factoryBeanClass)
|
||||
.as(FactoryBean.class).resolveGeneric();
|
||||
if (generic == null || generic.equals(Object.class)) {
|
||||
generic = determineTypeFromDefinitionAttribute(definition);
|
||||
if ((generic == null || generic.equals(Object.class))
|
||||
&& definition.hasAttribute(FACTORY_BEAN_OBJECT_TYPE)) {
|
||||
generic = getTypeFromAttribute(definition
|
||||
.getAttribute(FACTORY_BEAN_OBJECT_TYPE));
|
||||
}
|
||||
return generic;
|
||||
}
|
||||
|
||||
private Class<?> getTypeFromAttribute(Object attribute)
|
||||
throws ClassNotFoundException, LinkageError {
|
||||
if (attribute instanceof Class<?>) {
|
||||
return (Class<?>) attribute;
|
||||
}
|
||||
if (attribute instanceof String) {
|
||||
return ClassUtils.forName((String) attribute, null);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Factory method to get the {@link BeanTypeRegistry} for a given {@link BeanFactory}.
|
||||
* @param beanFactory the source bean factory
|
||||
|
@ -163,7 +163,7 @@ public class GzipFilterProperties {
|
||||
}
|
||||
|
||||
public List<MimeType> getExcludedMimeTypes() {
|
||||
return excludedMimeTypes;
|
||||
return this.excludedMimeTypes;
|
||||
}
|
||||
|
||||
public void setExcludedMimeTypes(List<MimeType> excludedMimeTypes) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2014 the original author or authors.
|
||||
* Copyright 2012-2015 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -51,9 +51,7 @@ public class ElasticsearchRepositoriesAutoConfigurationTests {
|
||||
@Test
|
||||
public void testDefaultRepositoryConfiguration() throws Exception {
|
||||
this.context = new AnnotationConfigApplicationContext();
|
||||
EnvironmentTestUtils.addEnvironment(this.context,
|
||||
"spring.data.elasticsearch.properties.path.data:target/data",
|
||||
"spring.data.elasticsearch.properties.path.logs:target/logs");
|
||||
addElasticsearchProperties(this.context);
|
||||
this.context.register(TestConfiguration.class,
|
||||
ElasticsearchAutoConfiguration.class,
|
||||
ElasticsearchRepositoriesAutoConfiguration.class,
|
||||
@ -67,9 +65,7 @@ public class ElasticsearchRepositoriesAutoConfigurationTests {
|
||||
@Test
|
||||
public void testNoRepositoryConfiguration() throws Exception {
|
||||
this.context = new AnnotationConfigApplicationContext();
|
||||
EnvironmentTestUtils.addEnvironment(this.context,
|
||||
"spring.data.elasticsearch.properties.path.data:target/data",
|
||||
"spring.data.elasticsearch.properties.path.logs:target/logs");
|
||||
addElasticsearchProperties(this.context);
|
||||
this.context.register(EmptyConfiguration.class,
|
||||
ElasticsearchAutoConfiguration.class,
|
||||
ElasticsearchRepositoriesAutoConfiguration.class,
|
||||
@ -82,9 +78,7 @@ public class ElasticsearchRepositoriesAutoConfigurationTests {
|
||||
@Test
|
||||
public void doesNotTriggerDefaultRepositoryDetectionIfCustomized() {
|
||||
this.context = new AnnotationConfigApplicationContext();
|
||||
EnvironmentTestUtils.addEnvironment(this.context,
|
||||
"spring.data.elasticsearch.properties.path.data:target/data",
|
||||
"spring.data.elasticsearch.properties.path.logs:target/logs");
|
||||
addElasticsearchProperties(this.context);
|
||||
this.context.register(CustomizedConfiguration.class,
|
||||
ElasticsearchAutoConfiguration.class,
|
||||
ElasticsearchRepositoriesAutoConfiguration.class,
|
||||
@ -94,6 +88,12 @@ public class ElasticsearchRepositoriesAutoConfigurationTests {
|
||||
assertNotNull(this.context.getBean(CityElasticsearchDbRepository.class));
|
||||
}
|
||||
|
||||
private void addElasticsearchProperties(AnnotationConfigApplicationContext context) {
|
||||
EnvironmentTestUtils.addEnvironment(context,
|
||||
"spring.data.elasticsearch.properties.path.data:target/data",
|
||||
"spring.data.elasticsearch.properties.path.logs:target/logs");
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@TestAutoConfigurationPackage(City.class)
|
||||
protected static class TestConfiguration {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2014 the original author or authors.
|
||||
* Copyright 2012-2015 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2014 the original author or authors.
|
||||
* Copyright 2012-2015 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -54,4 +54,5 @@ public class ElasticsearchDataAutoConfigurationTests {
|
||||
assertEquals(1,
|
||||
this.context.getBeanNamesForType(ElasticsearchTemplate.class).length);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -34,6 +34,7 @@ import org.springframework.boot.loader.tools.RunProcess;
|
||||
class RunProcessCommand extends AbstractCommand {
|
||||
|
||||
private final String[] command;
|
||||
|
||||
private volatile RunProcess process;
|
||||
|
||||
public RunProcessCommand(String... command) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2014 the original author or authors.
|
||||
* Copyright 2012-2015 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -33,6 +33,10 @@ import static org.junit.Assert.assertTrue;
|
||||
*/
|
||||
public class SampleElasticsearchApplicationTests {
|
||||
|
||||
private static final String[] PROPERTIES = {
|
||||
"spring.data.elasticsearch.properties.path.data:target/data",
|
||||
"spring.data.elasticsearch.properties.path.logs:target/logs" };
|
||||
|
||||
@Rule
|
||||
public OutputCapture outputCapture = new OutputCapture();
|
||||
|
||||
@ -40,10 +44,7 @@ public class SampleElasticsearchApplicationTests {
|
||||
public void testDefaultSettings() throws Exception {
|
||||
try {
|
||||
new SpringApplicationBuilder(SampleElasticsearchApplication.class)
|
||||
.properties(
|
||||
"spring.data.elasticsearch.properties.path.data:target/data",
|
||||
"spring.data.elasticsearch.properties.path.logs:target/logs")
|
||||
.run();
|
||||
.properties(PROPERTIES).run();
|
||||
}
|
||||
catch (IllegalStateException ex) {
|
||||
if (serverNotRunning(ex)) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2014 the original author or authors.
|
||||
* Copyright 2012-2015 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -19,6 +19,7 @@ package org.springframework.boot.loader.jar;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.lang.ref.SoftReference;
|
||||
import java.util.Calendar;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.zip.ZipEntry;
|
||||
|
||||
@ -31,6 +32,7 @@ import org.springframework.boot.loader.util.AsciiBytes;
|
||||
* the entry is actually needed.
|
||||
*
|
||||
* @author Phillip Webb
|
||||
* @author Andy Wilkinson
|
||||
*/
|
||||
public final class JarEntryData {
|
||||
|
||||
@ -146,20 +148,27 @@ public final class JarEntryData {
|
||||
}
|
||||
|
||||
public long getTime() {
|
||||
long time = Bytes.littleEndianValue(this.header, 12, 2);
|
||||
|
||||
int seconds = (int) ((time << 1) & 0x3E);
|
||||
int minutes = (int) ((time >> 5) & 0x3F);
|
||||
int hours = (int) ((time >> 11) & 0x1F);
|
||||
|
||||
long date = Bytes.littleEndianValue(this.header, 14, 2);
|
||||
long time = Bytes.littleEndianValue(this.header, 12, 2);
|
||||
return decodeMsDosFormatDateTime(date, time).getTimeInMillis();
|
||||
}
|
||||
|
||||
int day = (int) (date & 0x1F);
|
||||
int month = (int) ((date >> 5) & 0xF) - 1;
|
||||
/**
|
||||
* Decode MSDOS Date Time details. See <a
|
||||
* href="http://mindprod.com/jgloss/zip.html">mindprod.com/jgloss/zip.html</a> for
|
||||
* more details of the format.
|
||||
* @param date the date part
|
||||
* @param time the time part
|
||||
* @return a {@link Calendar} containing the decoded date.
|
||||
*/
|
||||
private Calendar decodeMsDosFormatDateTime(long date, long time) {
|
||||
int year = (int) ((date >> 9) & 0x7F) + 1980;
|
||||
|
||||
return new GregorianCalendar(year, month, day, hours, minutes, seconds)
|
||||
.getTimeInMillis();
|
||||
int month = (int) ((date >> 5) & 0xF) - 1;
|
||||
int day = (int) (date & 0x1F);
|
||||
int hours = (int) ((time >> 11) & 0x1F);
|
||||
int minutes = (int) ((time >> 5) & 0x3F);
|
||||
int seconds = (int) ((time << 1) & 0x3E);
|
||||
return new GregorianCalendar(year, month, day, hours, minutes, seconds);
|
||||
}
|
||||
|
||||
public long getCrc() {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2014 the original author or authors.
|
||||
* Copyright 2012-2015 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -121,16 +121,7 @@ public class PropertySourcesPropertyValues implements PropertyValues {
|
||||
.contains(source.getName()) && !includes.matches(propertyName)) {
|
||||
continue;
|
||||
}
|
||||
Object value = null;
|
||||
try {
|
||||
value = resolver.getProperty(propertyName, Object.class);
|
||||
}
|
||||
catch (RuntimeException ex) {
|
||||
// Probably could not resolve placeholders, ignore it here
|
||||
if (value == null) {
|
||||
value = source.getProperty(propertyName);
|
||||
}
|
||||
}
|
||||
Object value = getEnumerableProperty(source, resolver, propertyName);
|
||||
if (!this.propertyValues.containsKey(propertyName)) {
|
||||
this.propertyValues.put(propertyName, new PropertyValue(propertyName,
|
||||
value));
|
||||
@ -139,6 +130,17 @@ public class PropertySourcesPropertyValues implements PropertyValues {
|
||||
}
|
||||
}
|
||||
|
||||
private Object getEnumerableProperty(EnumerablePropertySource<?> source,
|
||||
PropertySourcesPropertyResolver resolver, String propertyName) {
|
||||
try {
|
||||
return resolver.getProperty(propertyName, Object.class);
|
||||
}
|
||||
catch (RuntimeException ex) {
|
||||
// Probably could not resolve placeholders, ignore it here
|
||||
return source.getProperty(propertyName);
|
||||
}
|
||||
}
|
||||
|
||||
private void processCompositePropertySource(CompositePropertySource source,
|
||||
PropertySourcesPropertyResolver resolver,
|
||||
PropertyNamePatternsMatcher includes, Collection<String> exacts) {
|
||||
|
@ -387,15 +387,17 @@ public class ConfigFileApplicationListener implements
|
||||
.getProperty(INCLUDE_PROFILES_PROPERTY));
|
||||
}
|
||||
}
|
||||
|
||||
StringBuilder msg = new StringBuilder();
|
||||
msg.append(propertySource == null ? "Skipped " : "Loaded ");
|
||||
msg.append("config file ");
|
||||
msg.append("'").append(location).append("' ");
|
||||
msg.append(StringUtils.hasLength(profile) ? "for profile " + profile : " ");
|
||||
msg.append(resource == null || !resource.exists() ? "resource not found" : "");
|
||||
msg.append("'").append(location).append("'");
|
||||
if (StringUtils.hasLength(profile)) {
|
||||
msg.append(" for profile" + profile);
|
||||
}
|
||||
if (resource == null || !resource.exists()) {
|
||||
msg.append(" resource not found");
|
||||
}
|
||||
this.debug.add(msg);
|
||||
|
||||
return propertySource;
|
||||
}
|
||||
|
||||
|
@ -20,6 +20,7 @@ import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@ -44,6 +45,7 @@ public class PropertySourcesPropertyValuesTests {
|
||||
@Before
|
||||
public void init() {
|
||||
this.propertySources.addFirst(new PropertySource<String>("static", "foo") {
|
||||
|
||||
@Override
|
||||
public Object getProperty(String name) {
|
||||
if (name.equals(getSource())) {
|
||||
@ -59,10 +61,8 @@ public class PropertySourcesPropertyValuesTests {
|
||||
|
||||
@Test
|
||||
public void testTypesPreserved() {
|
||||
this.propertySources.replace(
|
||||
"map",
|
||||
new MapPropertySource("map", Collections.<String, Object> singletonMap(
|
||||
"name", 123)));
|
||||
Map<String, Object> map = Collections.<String, Object> singletonMap("name", 123);
|
||||
this.propertySources.replace("map", new MapPropertySource("map", map));
|
||||
PropertySourcesPropertyValues propertyValues = new PropertySourcesPropertyValues(
|
||||
this.propertySources);
|
||||
assertEquals(123, propertyValues.getPropertyValues()[0].getValue());
|
||||
@ -123,6 +123,7 @@ public class PropertySourcesPropertyValuesTests {
|
||||
@Test
|
||||
public void testNonEnumeratedPlaceholder() {
|
||||
this.propertySources.addFirst(new PropertySource<String>("another", "baz") {
|
||||
|
||||
@Override
|
||||
public Object getProperty(String name) {
|
||||
if (name.equals(getSource())) {
|
||||
@ -179,10 +180,12 @@ public class PropertySourcesPropertyValuesTests {
|
||||
TestBean target = new TestBean();
|
||||
DataBinder binder = new DataBinder(target);
|
||||
this.propertySources.addFirst(new PropertySource<Object>("application", "STUFF") {
|
||||
|
||||
@Override
|
||||
public Object getProperty(String name) {
|
||||
return new Object();
|
||||
}
|
||||
|
||||
});
|
||||
binder.bind(new PropertySourcesPropertyValues(this.propertySources,
|
||||
(Collection<String>) null, Collections.singleton("name")));
|
||||
|
Loading…
Reference in New Issue
Block a user