NamespacePasswordEncoderTests groovy->java

Issue: gh-4939
This commit is contained in:
Rob Winch 2018-02-05 16:46:42 -06:00
parent 70db508218
commit 886bfa3daa

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2013 the original author or authors. * Copyright 2002-2018 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -13,61 +13,67 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.springframework.security.config.annotation.authentication
import static org.springframework.security.config.annotation.authentication.PasswordEncoderConfigurerConfigs.* package org.springframework.security.config.annotation.authentication;
import javax.sql.DataSource import org.junit.Rule;
import org.junit.Test;
import org.springframework.context.annotation.Bean import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
import org.springframework.ldap.core.support.BaseLdapPathContextSource;
import org.springframework.security.authentication.AuthenticationManager
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken
import org.springframework.security.config.annotation.BaseSpringSpec
import org.springframework.security.config.annotation.authentication.configurers.ldap.LdapAuthenticationProviderConfigurer;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.authority.AuthorityUtils import org.springframework.security.config.test.SpringTestRule;
import org.springframework.security.core.userdetails.User import org.springframework.security.core.userdetails.User;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.ldap.authentication.LdapAuthenticationProvider; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.provisioning.InMemoryUserDetailsManager import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.test.web.servlet.MockMvc;
import javax.sql.DataSource;
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestBuilders.formLogin;
import static org.springframework.security.test.web.servlet.response.SecurityMockMvcResultMatchers.authenticated;
/** /**
*
* @author Rob Winch * @author Rob Winch
*
*/ */
class NamespacePasswordEncoderTests extends BaseSpringSpec { public class NamespacePasswordEncoderTests {
def "password-encoder@ref with in memory"() {
when: @Rule
loadConfig(PasswordEncoderWithInMemoryConfig) public final SpringTestRule spring = new SpringTestRule();
then:
authenticationManager.authenticate(new UsernamePasswordAuthenticationToken("user", "password")) @Autowired
private MockMvc mockMvc;
@Test
public void passwordEncoderRefWithInMemory() throws Exception {
this.spring.register(PasswordEncoderWithInMemoryConfig.class).autowire();
this.mockMvc.perform(formLogin())
.andExpect(authenticated());
} }
@EnableWebSecurity @EnableWebSecurity
static class PasswordEncoderWithInMemoryConfig extends WebSecurityConfigurerAdapter { static class PasswordEncoderWithInMemoryConfig extends WebSecurityConfigurerAdapter {
@Override @Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception { protected void configure(AuthenticationManagerBuilder auth) throws Exception {
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder()
auth auth
.inMemoryAuthentication() .inMemoryAuthentication()
.withUser("user").password(encoder.encode("password")).roles("USER").and() .withUser("user").password(encoder.encode("password")).roles("USER").and()
.passwordEncoder(encoder) .passwordEncoder(encoder);
} }
} }
def "password-encoder@ref with jdbc"() { @Test
when: public void passwordEncoderRefWithJdbc() throws Exception {
loadConfig(PasswordEncoderWithJdbcConfig) this.spring.register(PasswordEncoderWithJdbcConfig.class).autowire();
then:
authenticationManager.authenticate(new UsernamePasswordAuthenticationToken("user", "password")) this.mockMvc.perform(formLogin())
.andExpect(authenticated());
} }
@EnableWebSecurity @EnableWebSecurity
@ -75,45 +81,49 @@ class NamespacePasswordEncoderTests extends BaseSpringSpec {
@Override @Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception { protected void configure(AuthenticationManagerBuilder auth) throws Exception {
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder() BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
auth auth
.jdbcAuthentication() .jdbcAuthentication()
.withDefaultSchema() .withDefaultSchema()
.dataSource(dataSource()) .dataSource(dataSource())
.withUser("user").password(encoder.encode("password")).roles("USER").and() .withUser("user").password(encoder.encode("password")).roles("USER").and()
.passwordEncoder(encoder) .passwordEncoder(encoder);
} }
@Bean @Bean
public DataSource dataSource() { public DataSource dataSource() {
EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder() EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
return builder.setType(EmbeddedDatabaseType.HSQL).build(); return builder.setType(EmbeddedDatabaseType.HSQL).build();
} }
} }
def "password-encoder@ref with userdetailsservice"() { @Test
when: public void passwordEncoderRefWithUserDetailsService() throws Exception {
loadConfig(PasswordEncoderWithUserDetailsServiceConfig) this.spring.register(PasswordEncoderWithUserDetailsServiceConfig.class).autowire();
then:
authenticationManager.authenticate(new UsernamePasswordAuthenticationToken("user", "password")) this.mockMvc.perform(formLogin())
.andExpect(authenticated());
} }
@EnableWebSecurity @EnableWebSecurity
static class PasswordEncoderWithUserDetailsServiceConfig extends WebSecurityConfigurerAdapter { static class PasswordEncoderWithUserDetailsServiceConfig extends WebSecurityConfigurerAdapter {
@Override @Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception { protected void configure(AuthenticationManagerBuilder auth) throws Exception {
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder() UserDetails user = User.withUsername("user")
User user = new User("user",encoder.encode("password"), AuthorityUtils.createAuthorityList("ROLE_USER")) .passwordEncoder(encoder::encode)
InMemoryUserDetailsManager uds = new InMemoryUserDetailsManager([user]) .password("password")
.roles("USER")
.build();
InMemoryUserDetailsManager uds = new InMemoryUserDetailsManager(user);
auth auth
.userDetailsService(uds) .userDetailsService(uds)
.passwordEncoder(encoder) .passwordEncoder(encoder);
} }
@Bean @Bean
public DataSource dataSource() { public DataSource dataSource() {
EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder() EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
return builder.setType(EmbeddedDatabaseType.HSQL).build(); return builder.setType(EmbeddedDatabaseType.HSQL).build();
} }
} }