Added basic login and logout functionality
- update SecurityConfiguration - add logout - add login - add AuthenticationController - add goodbye.html - add logout.html - add login.html
This commit is contained in:
@@ -2,9 +2,11 @@ package ltd.hlaeja.configuration
|
||||
|
||||
import org.springframework.context.annotation.Bean
|
||||
import org.springframework.context.annotation.Configuration
|
||||
import org.springframework.http.HttpStatus.FOUND
|
||||
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity
|
||||
import org.springframework.security.config.web.server.ServerHttpSecurity
|
||||
import org.springframework.security.config.web.server.ServerHttpSecurity.AuthorizeExchangeSpec
|
||||
import org.springframework.security.config.web.server.ServerHttpSecurity.FormLoginSpec
|
||||
import org.springframework.security.web.server.SecurityWebFilterChain
|
||||
|
||||
@Configuration
|
||||
@@ -14,8 +16,19 @@ class SecurityConfiguration {
|
||||
@Bean
|
||||
fun securityWebFilterChain(serverHttpSecurity: ServerHttpSecurity): SecurityWebFilterChain = serverHttpSecurity
|
||||
.authorizeExchange(::authorizeExchange)
|
||||
.formLogin(::formLogin)
|
||||
.logout(::logout)
|
||||
.build()
|
||||
|
||||
private fun logout(logout: ServerHttpSecurity.LogoutSpec) = logout.logoutUrl("/logout")
|
||||
.logoutSuccessHandler { webFilter, _ ->
|
||||
webFilter.exchange.response.headers.add("Location", "/logout")
|
||||
webFilter.exchange.response.statusCode = FOUND
|
||||
webFilter.exchange.response.setComplete()
|
||||
}
|
||||
|
||||
private fun formLogin(login: FormLoginSpec) = login.loginPage("/login")
|
||||
|
||||
private fun authorizeExchange(authorizeExchange: AuthorizeExchangeSpec) = authorizeExchange
|
||||
.publicPaths().permitAll()
|
||||
.anyExchange().authenticated()
|
||||
@@ -25,5 +38,7 @@ class SecurityConfiguration {
|
||||
"/js/**",
|
||||
"/img/**",
|
||||
"/actuator/**",
|
||||
"/login",
|
||||
"/logout",
|
||||
)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package ltd.hlaeja.controller
|
||||
|
||||
import org.springframework.http.HttpStatus.UNAUTHORIZED
|
||||
import org.springframework.security.core.context.ReactiveSecurityContextHolder
|
||||
import org.springframework.stereotype.Controller
|
||||
import org.springframework.web.bind.annotation.GetMapping
|
||||
import org.springframework.web.bind.annotation.ResponseStatus
|
||||
import reactor.core.publisher.Mono
|
||||
|
||||
@Controller
|
||||
class AuthenticationController {
|
||||
|
||||
@GetMapping("/login")
|
||||
@ResponseStatus(UNAUTHORIZED)
|
||||
fun login(): Mono<String> = Mono.just("authentication/login")
|
||||
|
||||
@GetMapping("/logout")
|
||||
fun logout(): Mono<String> = ReactiveSecurityContextHolder.getContext()
|
||||
.filter { it.authentication?.isAuthenticated == true }
|
||||
.map { "authentication/logout" }
|
||||
.defaultIfEmpty("authentication/goodbye")
|
||||
}
|
||||
Reference in New Issue
Block a user