|
|
|
|
@ -267,6 +267,142 @@ class AuthorizeRequestsDslTests {
@@ -267,6 +267,142 @@ class AuthorizeRequestsDslTests {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
fun `request when user has some allowed roles then responds with OK`() { |
|
|
|
|
this.spring.register(HasAnyRoleConfig::class.java).autowire() |
|
|
|
|
|
|
|
|
|
this.mockMvc.get("/") { |
|
|
|
|
with(httpBasic("user", "password")) |
|
|
|
|
}.andExpect { |
|
|
|
|
status { isOk } |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
this.mockMvc.get("/") { |
|
|
|
|
with(httpBasic("admin", "password")) |
|
|
|
|
}.andExpect { |
|
|
|
|
status { isOk } |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
fun `request when user does not have any allowed roles then responds with forbidden`() { |
|
|
|
|
this.spring.register(HasAnyRoleConfig::class.java).autowire() |
|
|
|
|
|
|
|
|
|
this.mockMvc.get("/") { |
|
|
|
|
with(httpBasic("other", "password")) |
|
|
|
|
}.andExpect { |
|
|
|
|
status { isForbidden } |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@EnableWebSecurity |
|
|
|
|
@EnableWebMvc |
|
|
|
|
open class HasAnyRoleConfig : WebSecurityConfigurerAdapter() { |
|
|
|
|
override fun configure(http: HttpSecurity) { |
|
|
|
|
http { |
|
|
|
|
authorizeRequests { |
|
|
|
|
authorize("/**", hasAnyRole("ADMIN", "USER")) |
|
|
|
|
} |
|
|
|
|
httpBasic { } |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@RestController |
|
|
|
|
internal class PathController { |
|
|
|
|
@GetMapping("/") |
|
|
|
|
fun index() { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
|
override fun userDetailsService(): UserDetailsService { |
|
|
|
|
val userDetails = User.withDefaultPasswordEncoder() |
|
|
|
|
.username("user") |
|
|
|
|
.password("password") |
|
|
|
|
.roles("USER") |
|
|
|
|
.build() |
|
|
|
|
val admin1Details = User.withDefaultPasswordEncoder() |
|
|
|
|
.username("admin") |
|
|
|
|
.password("password") |
|
|
|
|
.roles("ADMIN") |
|
|
|
|
.build() |
|
|
|
|
val admin2Details = User.withDefaultPasswordEncoder() |
|
|
|
|
.username("other") |
|
|
|
|
.password("password") |
|
|
|
|
.roles("OTHER") |
|
|
|
|
.build() |
|
|
|
|
return InMemoryUserDetailsManager(userDetails, admin1Details, admin2Details) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
fun `request when user has some allowed authorities then responds with OK`() { |
|
|
|
|
this.spring.register(HasAnyAuthorityConfig::class.java).autowire() |
|
|
|
|
|
|
|
|
|
this.mockMvc.get("/") { |
|
|
|
|
with(httpBasic("user", "password")) |
|
|
|
|
}.andExpect { |
|
|
|
|
status { isOk } |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
this.mockMvc.get("/") { |
|
|
|
|
with(httpBasic("admin", "password")) |
|
|
|
|
}.andExpect { |
|
|
|
|
status { isOk } |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
fun `request when user does not have any allowed authorities then responds with forbidden`() { |
|
|
|
|
this.spring.register(HasAnyAuthorityConfig::class.java).autowire() |
|
|
|
|
|
|
|
|
|
this.mockMvc.get("/") { |
|
|
|
|
with(httpBasic("other", "password")) |
|
|
|
|
}.andExpect { |
|
|
|
|
status { isForbidden } |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@EnableWebSecurity |
|
|
|
|
@EnableWebMvc |
|
|
|
|
open class HasAnyAuthorityConfig : WebSecurityConfigurerAdapter() { |
|
|
|
|
override fun configure(http: HttpSecurity) { |
|
|
|
|
http { |
|
|
|
|
authorizeRequests { |
|
|
|
|
authorize("/**", hasAnyAuthority("ROLE_ADMIN", "ROLE_USER")) |
|
|
|
|
} |
|
|
|
|
httpBasic { } |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@RestController |
|
|
|
|
internal class PathController { |
|
|
|
|
@GetMapping("/") |
|
|
|
|
fun index() { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
|
override fun userDetailsService(): UserDetailsService { |
|
|
|
|
val userDetails = User.withDefaultPasswordEncoder() |
|
|
|
|
.username("user") |
|
|
|
|
.password("password") |
|
|
|
|
.authorities("ROLE_USER") |
|
|
|
|
.build() |
|
|
|
|
val admin1Details = User.withDefaultPasswordEncoder() |
|
|
|
|
.username("admin") |
|
|
|
|
.password("password") |
|
|
|
|
.authorities("ROLE_ADMIN") |
|
|
|
|
.build() |
|
|
|
|
val admin2Details = User.withDefaultPasswordEncoder() |
|
|
|
|
.username("other") |
|
|
|
|
.password("password") |
|
|
|
|
.authorities("ROLE_OTHER") |
|
|
|
|
.build() |
|
|
|
|
return InMemoryUserDetailsManager(userDetails, admin1Details, admin2Details) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
fun `request when secured by mvc with servlet path then responds based on servlet path`() { |
|
|
|
|
this.spring.register(MvcMatcherServletPathConfig::class.java).autowire() |
|
|
|
|
|