Skip to content

Commit

Permalink
use Kotlin DSL for Servlet Security Configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
agebhar1 authored and marcusdacoregio committed Nov 7, 2023
1 parent bf71cfe commit aa42d96
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.security.config.annotation.web.builders.HttpSecurity
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
import org.springframework.security.config.annotation.web.invoke
import org.springframework.security.core.userdetails.User
import org.springframework.security.core.userdetails.UserDetailsService
import org.springframework.security.provisioning.InMemoryUserDetailsManager
Expand All @@ -34,11 +35,15 @@ class SecurityConfig {

@Bean
fun filterChain(http: HttpSecurity): SecurityFilterChain {
http.authorizeRequests()
.requestMatchers("/css/**").permitAll()
.requestMatchers("/user/**").hasAuthority("ROLE_USER")
.and()
.formLogin().loginPage("/log-in")
http {
authorizeRequests {
authorize("/css/**", permitAll)
authorize("/user/**", hasAuthority("ROLE_USER"))
}
formLogin {
loginPage = "/log-in"
}
}
return http.build()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,42 +16,41 @@

package org.springframework.security.samples

import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.mock.web.MockHttpSession
import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestBuilders.formLogin
import org.springframework.security.test.web.servlet.response.SecurityMockMvcResultMatchers.authenticated
import org.springframework.security.test.web.servlet.response.SecurityMockMvcResultMatchers.unauthenticated
import org.springframework.test.context.junit.jupiter.SpringExtension
import org.springframework.test.web.servlet.MockMvc
import org.springframework.test.web.servlet.get
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get
import org.springframework.test.web.servlet.result.MockMvcResultMatchers.status

@ExtendWith(SpringExtension::class)
@SpringBootTest
@AutoConfigureMockMvc
class KotlinApplicationTests {

@Autowired
private lateinit var mockMvc: MockMvc
class KotlinApplicationTests(@Autowired private val mockMvc: MockMvc) {

@Test
fun `index page is not protected`() {
this.mockMvc.perform(get("/"))
.andExpect(status().isOk())
this.mockMvc
.get("/")
.andExpect {
status { isOk() }
}
}

@Test
fun `protected page redirects to login`() {
val mvcResult = this.mockMvc.perform(get("/user/index"))
.andExpect(status().is3xxRedirection())
.andReturn()

assertThat(mvcResult.response.redirectedUrl).endsWith("/log-in")
this.mockMvc.get("/user/index")
.andExpect {
status { is3xxRedirection() }
header {
redirectedUrlPattern("**/log-in")
}
}
}

@Test
Expand Down

0 comments on commit aa42d96

Please sign in to comment.