diff --git a/.travis.yml b/.travis.yml
index d9940bd63..e5186bde2 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -12,5 +12,5 @@ install: ./mvnw -U install --quiet -DskipTests=true -P bootstrap
script:
- jdk_switcher use openjdk7
- ./mvnw clean test -P bootstrap
-# - jdk_switcher use oraclejdk8
-# - ./mvnw -U clean test -P spring5
+ - jdk_switcher use oraclejdk8
+ - ./mvnw -f spring-security-oauth2 -U clean test -P spring5
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index da114c02c..d80f4643a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,6 +21,8 @@
1.9
4.0.9.RELEASE
3.2.10.RELEASE
+ 1.5.0.RELEASE
+ 2.6.3
1.6
@@ -165,8 +167,10 @@
spring5
- 5.0.0.BUILD-SNAPSHOT
- 5.0.0.BUILD-SNAPSHOT
+ 5.0.4.RELEASE
+ 5.0.3.RELEASE
+ 2.0.5.RELEASE
+ 2.9.0
diff --git a/spring-security-oauth2/pom.xml b/spring-security-oauth2/pom.xml
index 98eb454d6..59838645c 100644
--- a/spring-security-oauth2/pom.xml
+++ b/spring-security-oauth2/pom.xml
@@ -161,14 +161,14 @@
org.springframework.data
spring-data-redis
- 1.5.0.RELEASE
+ ${spring.data.redis.version}
true
redis.clients
jedis
- 2.6.3
+ ${redis.clients.version}
true
diff --git a/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/client/http/OAuth2ErrorHandler.java b/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/client/http/OAuth2ErrorHandler.java
index 715a32bf0..af510e2ae 100644
--- a/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/client/http/OAuth2ErrorHandler.java
+++ b/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/client/http/OAuth2ErrorHandler.java
@@ -118,7 +118,7 @@ public void close() {
}
public int getRawStatusCode() throws IOException {
- return response.getRawStatusCode();
+ return this.getStatusCode().value();
}
};
diff --git a/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/provider/token/store/redis/RedisTokenStore.java b/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/provider/token/store/redis/RedisTokenStore.java
index fb3708f3c..76fbb39aa 100644
--- a/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/provider/token/store/redis/RedisTokenStore.java
+++ b/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/provider/token/store/redis/RedisTokenStore.java
@@ -1,11 +1,5 @@
package org.springframework.security.oauth2.provider.token.store.redis;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.security.oauth2.common.ExpiringOAuth2RefreshToken;
@@ -15,6 +9,15 @@
import org.springframework.security.oauth2.provider.token.AuthenticationKeyGenerator;
import org.springframework.security.oauth2.provider.token.DefaultAuthenticationKeyGenerator;
import org.springframework.security.oauth2.provider.token.TokenStore;
+import org.springframework.util.ClassUtils;
+import org.springframework.util.ReflectionUtils;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
/**
* @author efenderbosch
@@ -31,14 +34,23 @@ public class RedisTokenStore implements TokenStore {
private static final String CLIENT_ID_TO_ACCESS = "client_id_to_access:";
private static final String UNAME_TO_ACCESS = "uname_to_access:";
+ private static final boolean springDataRedis_2_0 = ClassUtils.isPresent(
+ "org.springframework.data.redis.connection.RedisStandaloneConfiguration",
+ RedisTokenStore.class.getClassLoader());
+
private final RedisConnectionFactory connectionFactory;
private AuthenticationKeyGenerator authenticationKeyGenerator = new DefaultAuthenticationKeyGenerator();
private RedisTokenStoreSerializationStrategy serializationStrategy = new JdkSerializationStrategy();
private String prefix = "";
+ private Method redisConnectionSet_2_0;
+
public RedisTokenStore(RedisConnectionFactory connectionFactory) {
this.connectionFactory = connectionFactory;
+ if (springDataRedis_2_0) {
+ this.loadRedisConnectionMethods_2_0();
+ }
}
public void setAuthenticationKeyGenerator(AuthenticationKeyGenerator authenticationKeyGenerator) {
@@ -53,6 +65,11 @@ public void setPrefix(String prefix) {
this.prefix = prefix;
}
+ private void loadRedisConnectionMethods_2_0() {
+ this.redisConnectionSet_2_0 = ReflectionUtils.findMethod(
+ RedisConnection.class, "set", byte[].class, byte[].class);
+ }
+
private RedisConnection getConnection() {
return connectionFactory.getConnection();
}
@@ -157,9 +174,19 @@ public void storeAccessToken(OAuth2AccessToken token, OAuth2Authentication authe
RedisConnection conn = getConnection();
try {
conn.openPipeline();
- conn.set(accessKey, serializedAccessToken);
- conn.set(authKey, serializedAuth);
- conn.set(authToAccessKey, serializedAccessToken);
+ if (springDataRedis_2_0) {
+ try {
+ this.redisConnectionSet_2_0.invoke(conn, accessKey, serializedAccessToken);
+ this.redisConnectionSet_2_0.invoke(conn, authKey, serializedAuth);
+ this.redisConnectionSet_2_0.invoke(conn, authToAccessKey, serializedAccessToken);
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+ } else {
+ conn.set(accessKey, serializedAccessToken);
+ conn.set(authKey, serializedAuth);
+ conn.set(authToAccessKey, serializedAccessToken);
+ }
if (!authentication.isClientOnly()) {
conn.rPush(approvalKey, serializedAccessToken);
}
@@ -177,9 +204,18 @@ public void storeAccessToken(OAuth2AccessToken token, OAuth2Authentication authe
byte[] refresh = serialize(token.getRefreshToken().getValue());
byte[] auth = serialize(token.getValue());
byte[] refreshToAccessKey = serializeKey(REFRESH_TO_ACCESS + token.getRefreshToken().getValue());
- conn.set(refreshToAccessKey, auth);
byte[] accessToRefreshKey = serializeKey(ACCESS_TO_REFRESH + token.getValue());
- conn.set(accessToRefreshKey, refresh);
+ if (springDataRedis_2_0) {
+ try {
+ this.redisConnectionSet_2_0.invoke(conn, refreshToAccessKey, auth);
+ this.redisConnectionSet_2_0.invoke(conn, accessToRefreshKey, refresh);
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+ } else {
+ conn.set(refreshToAccessKey, auth);
+ conn.set(accessToRefreshKey, refresh);
+ }
if (refreshToken instanceof ExpiringOAuth2RefreshToken) {
ExpiringOAuth2RefreshToken expiringRefreshToken = (ExpiringOAuth2RefreshToken) refreshToken;
Date expiration = expiringRefreshToken.getExpiration();
diff --git a/spring-security-oauth2/src/test/java/org/springframework/security/oauth2/config/annotation/Gh808EnableAuthorizationServerTests.java b/spring-security-oauth2/src/test/java/org/springframework/security/oauth2/config/annotation/Gh808EnableAuthorizationServerTests.java
index 3e8bc61f8..7f0f6e239 100644
--- a/spring-security-oauth2/src/test/java/org/springframework/security/oauth2/config/annotation/Gh808EnableAuthorizationServerTests.java
+++ b/spring-security-oauth2/src/test/java/org/springframework/security/oauth2/config/annotation/Gh808EnableAuthorizationServerTests.java
@@ -33,6 +33,8 @@
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.codec.Base64;
+import org.springframework.security.crypto.password.NoOpPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
@@ -188,5 +190,10 @@ public UserDetails loadUserByUsername(String username) throws UsernameNotFoundEx
}
};
}
+
+ @Bean
+ public PasswordEncoder passwordEncoder() {
+ return NoOpPasswordEncoder.getInstance();
+ }
}
}
diff --git a/spring-security-oauth2/src/test/java/org/springframework/security/oauth2/config/annotation/ResourceServerConfigurationTests.java b/spring-security-oauth2/src/test/java/org/springframework/security/oauth2/config/annotation/ResourceServerConfigurationTests.java
index f6a32703e..fb826eec1 100644
--- a/spring-security-oauth2/src/test/java/org/springframework/security/oauth2/config/annotation/ResourceServerConfigurationTests.java
+++ b/spring-security-oauth2/src/test/java/org/springframework/security/oauth2/config/annotation/ResourceServerConfigurationTests.java
@@ -36,6 +36,8 @@
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.Authentication;
import org.springframework.security.crypto.codec.Base64;
+import org.springframework.security.crypto.password.NoOpPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
@@ -253,6 +255,10 @@ public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
@Configuration
protected static class SecurityConfiguration extends WebSecurityConfigurerAdapter {
+ @Bean
+ public PasswordEncoder passwordEncoder() {
+ return NoOpPasswordEncoder.getInstance();
+ }
}
}
@@ -275,6 +281,10 @@ public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws E
}
@Configuration
protected static class SecurityConfiguration extends WebSecurityConfigurerAdapter {
+ @Bean
+ public PasswordEncoder passwordEncoder() {
+ return NoOpPasswordEncoder.getInstance();
+ }
}
}
diff --git a/spring-security-oauth2/src/test/java/org/springframework/security/oauth2/provider/token/store/redis/RedisTokenStoreTests.java b/spring-security-oauth2/src/test/java/org/springframework/security/oauth2/provider/token/store/redis/RedisTokenStoreTests.java
index 5e06e2c92..996e15c21 100644
--- a/spring-security-oauth2/src/test/java/org/springframework/security/oauth2/provider/token/store/redis/RedisTokenStoreTests.java
+++ b/spring-security-oauth2/src/test/java/org/springframework/security/oauth2/provider/token/store/redis/RedisTokenStoreTests.java
@@ -4,12 +4,17 @@
import org.junit.Test;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.security.authentication.TestingAuthenticationToken;
-import org.springframework.security.oauth2.common.*;
+import org.springframework.security.oauth2.common.DefaultExpiringOAuth2RefreshToken;
+import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken;
+import org.springframework.security.oauth2.common.DefaultOAuth2RefreshToken;
+import org.springframework.security.oauth2.common.OAuth2AccessToken;
+import org.springframework.security.oauth2.common.OAuth2RefreshToken;
import org.springframework.security.oauth2.provider.OAuth2Authentication;
import org.springframework.security.oauth2.provider.OAuth2Request;
import org.springframework.security.oauth2.provider.RequestTokenFactory;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.security.oauth2.provider.token.store.TokenStoreBaseTests;
+import org.springframework.util.ClassUtils;
import redis.clients.jedis.JedisShardInfo;
import java.util.Collection;
@@ -32,8 +37,18 @@ public TokenStore getTokenStore() {
@Before
public void setup() throws Exception {
- JedisShardInfo shardInfo = new JedisShardInfo("localhost");
- JedisConnectionFactory connectionFactory = new JedisConnectionFactory(shardInfo);
+ boolean springDataRedis_2_0 = ClassUtils.isPresent(
+ "org.springframework.data.redis.connection.RedisStandaloneConfiguration",
+ this.getClass().getClassLoader());
+
+ JedisConnectionFactory connectionFactory;
+ if (springDataRedis_2_0) {
+ connectionFactory = new JedisConnectionFactory();
+ } else {
+ JedisShardInfo shardInfo = new JedisShardInfo("localhost");
+ connectionFactory = new JedisConnectionFactory(shardInfo);
+ }
+
tokenStore = new RedisTokenStore(connectionFactory);
}
diff --git a/spring-security-oauth2/src/test/resources/org/springframework/security/oauth2/config/xml/authorization-server-client-credentials-password-invalid.xml b/spring-security-oauth2/src/test/resources/org/springframework/security/oauth2/config/xml/authorization-server-client-credentials-password-invalid.xml
index 5927e0a93..e5c7a91fd 100644
--- a/spring-security-oauth2/src/test/resources/org/springframework/security/oauth2/config/xml/authorization-server-client-credentials-password-invalid.xml
+++ b/spring-security-oauth2/src/test/resources/org/springframework/security/oauth2/config/xml/authorization-server-client-credentials-password-invalid.xml
@@ -52,6 +52,7 @@
+
@@ -65,4 +66,6 @@
+
+
\ No newline at end of file
diff --git a/spring-security-oauth2/src/test/resources/org/springframework/security/oauth2/config/xml/authorization-server-client-credentials-password-valid.xml b/spring-security-oauth2/src/test/resources/org/springframework/security/oauth2/config/xml/authorization-server-client-credentials-password-valid.xml
index b6ea89ce4..6d2f5ce67 100644
--- a/spring-security-oauth2/src/test/resources/org/springframework/security/oauth2/config/xml/authorization-server-client-credentials-password-valid.xml
+++ b/spring-security-oauth2/src/test/resources/org/springframework/security/oauth2/config/xml/authorization-server-client-credentials-password-valid.xml
@@ -33,7 +33,9 @@
-
+
+
+
@@ -46,6 +48,7 @@
+
@@ -59,4 +62,6 @@
+
+
\ No newline at end of file