Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
J
javab_20230617
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Patryk Czarnik
javab_20230617
Commits
cab20856
Commit
cab20856
authored
Jul 30, 2023
by
Patryk Czarnik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
requestMatchers i reguły dostępu
parent
3bf9b1b4
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
19 additions
and
2 deletions
+19
-2
SecurityConfig.java
...epSpring/src/main/java/sklep/security/SecurityConfig.java
+19
-2
No files found.
PC27-SklepSpring/src/main/java/sklep/security/SecurityConfig.java
View file @
cab20856
...
@@ -10,6 +10,8 @@ import org.springframework.security.core.userdetails.UserDetails;
...
@@ -10,6 +10,8 @@ import org.springframework.security.core.userdetails.UserDetails;
import
org.springframework.security.provisioning.InMemoryUserDetailsManager
;
import
org.springframework.security.provisioning.InMemoryUserDetailsManager
;
import
org.springframework.security.web.SecurityFilterChain
;
import
org.springframework.security.web.SecurityFilterChain
;
import
jakarta.servlet.DispatcherType
;
@Configuration
@Configuration
@EnableWebSecurity
@EnableWebSecurity
public
class
SecurityConfig
{
public
class
SecurityConfig
{
...
@@ -19,11 +21,26 @@ public class SecurityConfig {
...
@@ -19,11 +21,26 @@ public class SecurityConfig {
// - sposób uwierzytelniania
// - sposób uwierzytelniania
// (czy tradycyjny formularz logowania, czy HttpBasic, czy OAuth2, ...)
// (czy tradycyjny formularz logowania, czy HttpBasic, czy OAuth2, ...)
// W tej wersji jawnie wpisujemy takie ustawienia, które są ustawieniami domyślnymi.
// W tej wersji różnym rolom dajemy różne poziomy dostępu.
// (inaczej mówiąc: dla róznych adresów mamy różne wymagania)
// To pomogło mi napisać poprawną konfigurację w "nowym stylu":
// https://docs.spring.io/spring-security/reference/servlet/authorization/authorize-http-requests.html
// Kluczowe było dodanie linii z DispatcherType.FORWARD → bez tego Spring wymagał autentykacji na etapie przechodzenia do szablonu jsp (FORWARD) lub wyświetlenia błędu
@Bean
@Bean
SecurityFilterChain
configHttpSecurity
(
HttpSecurity
httpSecurity
)
throws
Exception
{
SecurityFilterChain
configHttpSecurity
(
HttpSecurity
httpSecurity
)
throws
Exception
{
httpSecurity
.
authorizeHttpRequests
(
authz
->
authz
httpSecurity
.
authorizeHttpRequests
(
authz
->
authz
.
anyRequest
().
authenticated
()
// zezwalamy na działanie przekierowań wewnętrznych (szablony) i błędów
.
dispatcherTypeMatchers
(
DispatcherType
.
FORWARD
,
DispatcherType
.
ERROR
).
permitAll
()
.
requestMatchers
(
"/"
,
"/whoami"
,
"/*.css"
).
permitAll
()
.
requestMatchers
(
"/hello"
,
"/time"
).
permitAll
()
.
requestMatchers
(
"/alt?/**"
).
authenticated
()
// zalogowany jako ktokolwiek
.
requestMatchers
(
"/products/new"
,
"/products/*/edit"
).
hasAuthority
(
"ROLE_manager"
)
.
requestMatchers
(
"/products/**"
).
permitAll
()
// kolejność reguł ma znaczenie
.
requestMatchers
(
"/customers/new"
,
"/customers/*/edit"
).
hasRole
(
"manager"
)
// skrót na hasAuthority("ROLE_...")
.
requestMatchers
(
"/customers/**"
).
authenticated
()
.
anyRequest
().
denyAll
()
// dobra praktyka - odrzucanie pozostałych zapytań; Spring domyślnie wymagałby "authenticated"
).
formLogin
(
Customizer
.
withDefaults
())
).
formLogin
(
Customizer
.
withDefaults
())
;
;
return
httpSecurity
.
build
();
return
httpSecurity
.
build
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment