mirror of
https://github.com/spring-projects/spring-security.git
synced 2026-03-30 22:12:48 +00:00
add tests
Signed-off-by: Andrey Litvitski <andrey1010102008@gmail.com>
This commit is contained in:
parent
6335caabae
commit
b92c072501
@ -0,0 +1,102 @@
|
||||
/*
|
||||
* Copyright 2004-present 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
|
||||
*
|
||||
* https://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.docs.servlet.addingcustomfilter;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.security.access.AccessDeniedException;
|
||||
import org.springframework.security.core.userdetails.User;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
import org.springframework.security.core.userdetails.UserDetailsService;
|
||||
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
||||
import org.springframework.test.context.web.WebAppConfiguration;
|
||||
import org.springframework.test.web.servlet.MockMvc;
|
||||
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
|
||||
import org.springframework.web.context.WebApplicationContext;
|
||||
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
||||
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.user;
|
||||
import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
import static org.springframework.security.test.web.servlet.response.SecurityMockMvcResultMatchers.authenticated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@ExtendWith(SpringExtension.class)
|
||||
@ContextConfiguration(classes = {
|
||||
CustomFilterAfterTests.UserDetailsConfig.class,
|
||||
CustomFilterAfterTests.ApiController.class,
|
||||
SecurityConfigAfter.class })
|
||||
@WebAppConfiguration
|
||||
public class CustomFilterAfterTests {
|
||||
|
||||
@Autowired
|
||||
private WebApplicationContext context;
|
||||
|
||||
private MockMvc mvc;
|
||||
|
||||
@BeforeEach
|
||||
void setup() {
|
||||
this.mvc = MockMvcBuilders.webAppContextSetup(this.context)
|
||||
.defaultRequest(get("/api").with(user("user")))
|
||||
.apply(springSecurity())
|
||||
.build();
|
||||
}
|
||||
|
||||
@Test
|
||||
void tenantFilterWhenHeaderMissingThenAccessDenied() {
|
||||
assertThatExceptionOfType(AccessDeniedException.class)
|
||||
.isThrownBy(() -> this.mvc.perform(get("/api")).andReturn());
|
||||
}
|
||||
|
||||
@Test
|
||||
void tenantFilterWhenHeaderPresentThenContinuesFilterChain() throws Exception {
|
||||
this.mvc.perform(get("/api").header("X-Tenant-Id", "some-tenant-id"))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(authenticated().withUsername("user"));
|
||||
}
|
||||
|
||||
@Configuration
|
||||
static class UserDetailsConfig {
|
||||
@Bean
|
||||
UserDetailsService userDetailsService() {
|
||||
UserDetails user = User.withDefaultPasswordEncoder()
|
||||
.username("user")
|
||||
.password("password")
|
||||
.roles("USER")
|
||||
.build();
|
||||
return new InMemoryUserDetailsManager(user);
|
||||
}
|
||||
}
|
||||
|
||||
@RestController
|
||||
static class ApiController {
|
||||
|
||||
@GetMapping("/api")
|
||||
String api() {
|
||||
return "ok";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@ -45,11 +45,11 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@ExtendWith(SpringExtension.class)
|
||||
@ContextConfiguration(classes = {
|
||||
CustomFilterTests.UserDetailsConfig.class,
|
||||
CustomFilterTests.ApiController.class,
|
||||
CustomFilterBeforeTests.UserDetailsConfig.class,
|
||||
CustomFilterBeforeTests.ApiController.class,
|
||||
SecurityConfigBefore.class })
|
||||
@WebAppConfiguration
|
||||
public class CustomFilterTests {
|
||||
public class CustomFilterBeforeTests {
|
||||
|
||||
@Autowired
|
||||
private WebApplicationContext context;
|
||||
@ -0,0 +1,106 @@
|
||||
/*
|
||||
* Copyright 2004-present 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
|
||||
*
|
||||
* https://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.kt.docs.servlet.addingcustomfilter
|
||||
|
||||
import org.assertj.core.api.Assertions.assertThatExceptionOfType
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.junit.jupiter.api.extension.ExtendWith
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
import org.springframework.context.annotation.Bean
|
||||
import org.springframework.context.annotation.Configuration
|
||||
import org.springframework.security.core.userdetails.User
|
||||
import org.springframework.security.core.userdetails.UserDetails
|
||||
import org.springframework.security.core.userdetails.UserDetailsService
|
||||
import org.springframework.security.provisioning.InMemoryUserDetailsManager
|
||||
import org.springframework.test.context.ContextConfiguration
|
||||
import org.springframework.test.context.junit.jupiter.SpringExtension
|
||||
import org.springframework.test.context.web.WebAppConfiguration
|
||||
import org.springframework.test.web.servlet.MockMvc
|
||||
import org.springframework.test.web.servlet.setup.MockMvcBuilders
|
||||
import org.springframework.web.context.WebApplicationContext
|
||||
import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.user
|
||||
import org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity
|
||||
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get
|
||||
import org.springframework.test.web.servlet.result.MockMvcResultMatchers.status
|
||||
import org.springframework.security.test.web.servlet.response.SecurityMockMvcResultMatchers.authenticated
|
||||
import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder
|
||||
import org.springframework.web.bind.annotation.GetMapping
|
||||
import org.springframework.web.bind.annotation.RestController
|
||||
|
||||
@ExtendWith(SpringExtension::class)
|
||||
@ContextConfiguration(
|
||||
classes = [
|
||||
CustomFilterAfterTests.UserDetailsConfig::class,
|
||||
CustomFilterAfterTests.ApiController::class,
|
||||
SecurityConfigAfter::class
|
||||
]
|
||||
)
|
||||
@WebAppConfiguration
|
||||
class CustomFilterAfterTests {
|
||||
|
||||
@Autowired
|
||||
private lateinit var context: WebApplicationContext
|
||||
|
||||
private lateinit var mvc: MockMvc
|
||||
|
||||
@BeforeEach
|
||||
fun setup() {
|
||||
this.mvc = MockMvcBuilders.webAppContextSetup(this.context)
|
||||
.apply<DefaultMockMvcBuilder>(springSecurity())
|
||||
.build();
|
||||
}
|
||||
|
||||
@Test
|
||||
fun tenantFilterWhenHeaderMissingThenAccessDenied() {
|
||||
assertThatExceptionOfType(Exception::class.java)
|
||||
.isThrownBy { this.mvc.perform(get("/api").with(user("user"))).andReturn() }
|
||||
}
|
||||
|
||||
@Test
|
||||
fun tenantFilterWhenHeaderPresentThenContinuesFilterChain() {
|
||||
this.mvc.perform(get("/api")
|
||||
.with(user("user"))
|
||||
.header("X-Tenant-Id", "some-tenant-id"))
|
||||
.andExpect(status().isOk)
|
||||
.andExpect(authenticated().withUsername("user"))
|
||||
}
|
||||
|
||||
@Configuration
|
||||
open class UserDetailsConfig {
|
||||
@Bean
|
||||
open fun userDetailsService(): UserDetailsService {
|
||||
@Suppress("DEPRECATION")
|
||||
val user: UserDetails = User.withDefaultPasswordEncoder()
|
||||
.username("user")
|
||||
.password("password")
|
||||
.roles("USER")
|
||||
.build()
|
||||
return InMemoryUserDetailsManager(user)
|
||||
}
|
||||
}
|
||||
|
||||
@RestController
|
||||
class ApiController {
|
||||
|
||||
@GetMapping("/api")
|
||||
fun api(): String {
|
||||
return "ok"
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@ -45,13 +45,13 @@ import org.springframework.web.bind.annotation.RestController
|
||||
@ExtendWith(SpringExtension::class)
|
||||
@ContextConfiguration(
|
||||
classes = [
|
||||
CustomFilterTests.UserDetailsConfig::class,
|
||||
CustomFilterTests.ApiController::class,
|
||||
CustomFilterBeforeTests.UserDetailsConfig::class,
|
||||
CustomFilterBeforeTests.ApiController::class,
|
||||
SecurityConfigBefore::class
|
||||
]
|
||||
)
|
||||
@WebAppConfiguration
|
||||
class CustomFilterTests {
|
||||
class CustomFilterBeforeTests {
|
||||
|
||||
@Autowired
|
||||
private lateinit var context: WebApplicationContext
|
||||
Loading…
x
Reference in New Issue
Block a user