|
@@ -1,185 +0,0 @@
|
|
|
-/*
|
|
|
- * Copyright 2002-2013 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.
|
|
|
- * You may obtain a copy of the License at
|
|
|
- *
|
|
|
- * http://www.apache.org/licenses/LICENSE-2.0
|
|
|
- *
|
|
|
- * Unless required by applicable law or agreed to in writing, software
|
|
|
- * distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
- * See the License for the specific language governing permissions and
|
|
|
- * limitations under the License.
|
|
|
- */
|
|
|
-package org.springframework.security.config.annotation.authentication
|
|
|
-
|
|
|
-import org.springframework.security.core.userdetails.PasswordEncodedUser
|
|
|
-
|
|
|
-import javax.sql.DataSource
|
|
|
-
|
|
|
-import org.springframework.beans.factory.annotation.Autowired
|
|
|
-import org.springframework.context.annotation.Bean
|
|
|
-import org.springframework.context.annotation.Configuration
|
|
|
-import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder
|
|
|
-import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType
|
|
|
-import org.springframework.security.authentication.AuthenticationManager
|
|
|
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken
|
|
|
-import org.springframework.security.authentication.dao.DaoAuthenticationProvider
|
|
|
-import org.springframework.security.config.annotation.BaseSpringSpec
|
|
|
-import org.springframework.security.config.annotation.authentication.NamespaceJdbcUserServiceTests.CustomJdbcUserServiceSampleConfig.CustomUserCache;
|
|
|
-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.WebSecurityConfigurerAdapter;
|
|
|
-import org.springframework.security.core.Authentication
|
|
|
-import org.springframework.security.core.userdetails.UserCache
|
|
|
-import org.springframework.security.core.userdetails.UserDetails;
|
|
|
-import org.springframework.security.provisioning.JdbcUserDetailsManager
|
|
|
-
|
|
|
-/**
|
|
|
- *
|
|
|
- * @author Rob Winch
|
|
|
- *
|
|
|
- */
|
|
|
-class NamespaceJdbcUserServiceTests extends BaseSpringSpec {
|
|
|
- def "jdbc-user-service"() {
|
|
|
- when:
|
|
|
- loadConfig(DataSourceConfig,JdbcUserServiceConfig)
|
|
|
- then:
|
|
|
- findAuthenticationProvider(DaoAuthenticationProvider).userDetailsService instanceof JdbcUserDetailsManager
|
|
|
- }
|
|
|
-
|
|
|
- @EnableWebSecurity
|
|
|
- static class JdbcUserServiceConfig extends WebSecurityConfigurerAdapter {
|
|
|
- @Autowired
|
|
|
- private DataSource dataSource;
|
|
|
-
|
|
|
- protected void configure(AuthenticationManagerBuilder auth) throws Exception {
|
|
|
- auth
|
|
|
- .jdbcAuthentication()
|
|
|
- .dataSource(dataSource) // jdbc-user-service@data-source-ref
|
|
|
- }
|
|
|
-
|
|
|
- // Only necessary to have access to verify the AuthenticationManager
|
|
|
- @Bean
|
|
|
- @Override
|
|
|
- public AuthenticationManager authenticationManagerBean()
|
|
|
- throws Exception {
|
|
|
- return super.authenticationManagerBean();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- def "jdbc-user-service in memory testing sample"() {
|
|
|
- when:
|
|
|
- loadConfig(DataSourceConfig,JdbcUserServiceInMemorySampleConfig)
|
|
|
- then:
|
|
|
- Authentication auth = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken("user", "password"))
|
|
|
- auth.authorities.collect {it.authority} == ['ROLE_USER']
|
|
|
- auth.name == "user"
|
|
|
- }
|
|
|
-
|
|
|
- @EnableWebSecurity
|
|
|
- static class JdbcUserServiceInMemorySampleConfig extends WebSecurityConfigurerAdapter {
|
|
|
- @Autowired
|
|
|
- private DataSource dataSource;
|
|
|
-
|
|
|
- protected void configure(AuthenticationManagerBuilder auth) throws Exception {
|
|
|
- auth
|
|
|
- .jdbcAuthentication()
|
|
|
- .dataSource(dataSource)
|
|
|
- // imports the default schema (will fail if already exists)
|
|
|
- .withDefaultSchema()
|
|
|
- // adds this user automatically (will fail if already exists)
|
|
|
- .withUser(PasswordEncodedUser.user())
|
|
|
- }
|
|
|
-
|
|
|
- // Only necessary to have access to verify the AuthenticationManager
|
|
|
- @Bean
|
|
|
- @Override
|
|
|
- public AuthenticationManager authenticationManagerBean()
|
|
|
- throws Exception {
|
|
|
- return super.authenticationManagerBean();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Configuration
|
|
|
- static class DataSourceConfig {
|
|
|
- @Bean
|
|
|
- public DataSource dataSource() {
|
|
|
- EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder()
|
|
|
- return builder.setType(EmbeddedDatabaseType.HSQL).build();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- def "jdbc-user-service custom"() {
|
|
|
- when:
|
|
|
- loadConfig(CustomDataSourceConfig,CustomJdbcUserServiceSampleConfig)
|
|
|
- then:
|
|
|
- findAuthenticationProvider(DaoAuthenticationProvider).userDetailsService.userCache instanceof CustomUserCache
|
|
|
- when:
|
|
|
- Authentication auth = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken("user", "password"))
|
|
|
- then:
|
|
|
- auth.authorities.collect {it.authority}.sort() == ['ROLE_DBA','ROLE_USER']
|
|
|
- auth.name == 'user'
|
|
|
- }
|
|
|
-
|
|
|
- @EnableWebSecurity
|
|
|
- static class CustomJdbcUserServiceSampleConfig extends WebSecurityConfigurerAdapter {
|
|
|
- @Autowired
|
|
|
- private DataSource dataSource;
|
|
|
-
|
|
|
- protected void configure(AuthenticationManagerBuilder auth) throws Exception {
|
|
|
- auth
|
|
|
- .jdbcAuthentication()
|
|
|
- // jdbc-user-service@dataSource
|
|
|
- .dataSource(dataSource)
|
|
|
- // jdbc-user-service@cache-ref
|
|
|
- .userCache(new CustomUserCache())
|
|
|
- // jdbc-user-service@users-byusername-query
|
|
|
- .usersByUsernameQuery("select principal,credentials,true from users where principal = ?")
|
|
|
- // jdbc-user-service@authorities-by-username-query
|
|
|
- .authoritiesByUsernameQuery("select principal,role from roles where principal = ?")
|
|
|
- // jdbc-user-service@group-authorities-by-username-query
|
|
|
- .groupAuthoritiesByUsername(JdbcUserDetailsManager.DEF_GROUP_AUTHORITIES_BY_USERNAME_QUERY)
|
|
|
- // jdbc-user-service@role-prefix
|
|
|
- .rolePrefix("ROLE_")
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- // Only necessary to have access to verify the AuthenticationManager
|
|
|
- @Bean
|
|
|
- @Override
|
|
|
- public AuthenticationManager authenticationManagerBean()
|
|
|
- throws Exception {
|
|
|
- return super.authenticationManagerBean();
|
|
|
- }
|
|
|
-
|
|
|
- static class CustomUserCache implements UserCache {
|
|
|
-
|
|
|
- @Override
|
|
|
- public UserDetails getUserFromCache(String username) {
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void putUserInCache(UserDetails user) {
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void removeUserFromCache(String username) {
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Configuration
|
|
|
- static class CustomDataSourceConfig {
|
|
|
- @Bean
|
|
|
- public DataSource dataSource() {
|
|
|
- EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder()
|
|
|
- // simulate that the DB already has the schema loaded and users in it
|
|
|
- .addScript("CustomJdbcUserServiceSampleConfig.sql")
|
|
|
- return builder.setType(EmbeddedDatabaseType.HSQL).build();
|
|
|
- }
|
|
|
- }
|
|
|
-}
|