|
@@ -0,0 +1,56 @@
|
|
|
+/*
|
|
|
+ * Copyright 2002-2020 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.samples.config
|
|
|
+
|
|
|
+import org.springframework.context.annotation.Bean
|
|
|
+import org.springframework.security.config.Customizer
|
|
|
+import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity
|
|
|
+import org.springframework.security.config.web.server.ServerHttpSecurity
|
|
|
+import org.springframework.security.config.web.server.invoke
|
|
|
+import org.springframework.security.core.userdetails.MapReactiveUserDetailsService
|
|
|
+import org.springframework.security.core.userdetails.ReactiveUserDetailsService
|
|
|
+import org.springframework.security.core.userdetails.User
|
|
|
+import org.springframework.security.web.server.SecurityWebFilterChain
|
|
|
+
|
|
|
+@EnableWebFluxSecurity
|
|
|
+class SecurityConfig {
|
|
|
+
|
|
|
+ @Bean
|
|
|
+ fun springSecurityFilterChain(http: ServerHttpSecurity): SecurityWebFilterChain {
|
|
|
+ return http {
|
|
|
+ authorizeExchange {
|
|
|
+ authorize("/log-in", permitAll)
|
|
|
+ authorize("/", permitAll)
|
|
|
+ authorize("/css/**", permitAll)
|
|
|
+ authorize("/user/**", hasAuthority("ROLE_USER"))
|
|
|
+ }
|
|
|
+ formLogin {
|
|
|
+ loginPage = "/log-in"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Bean
|
|
|
+ fun userDetailsService(): ReactiveUserDetailsService {
|
|
|
+ val userDetails = User.withDefaultPasswordEncoder()
|
|
|
+ .username("user")
|
|
|
+ .password("password")
|
|
|
+ .roles("USER")
|
|
|
+ .build()
|
|
|
+ return MapReactiveUserDetailsService(userDetails)
|
|
|
+ }
|
|
|
+}
|