You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Yukarıdkai bağımlılık ifadesiyle artık API güvenliği ilk adım atılır. Konsol ortamında verilen **generated security password** ve **user** kullanıcı adı ile oturum açılabilir.
13
13
14
-
* Logout olma şansı yoktur.
15
-
* Kullanıcı adı ve şifresine müdahale edilemez.
14
+
Yukarıdkai bağımlılık ifadesiyle artık API güvenliği ilk adım atılır. Konsol ortamında verilen **generated security password** ve **user** kullanıcı adı ile oturum açılabilir.
15
+
16
+
- Logout olma şansı yoktur.
17
+
- Kullanıcı adı ve şifresine müdahale edilemez.
16
18
17
19
## 1.2. Application Security Config
18
20
19
21
**security/config** gibi bir isimle yeni bir klasör projeye dahil edilir.
20
22
21
23
Gelen Request yapılarını hangi kurallara göre cevap verileceğini belirlemek üzere **ApplicationSecurityConfig** sınıfı kullanılır.
22
-
Bu sınıf **WebSecurityConfigurerAdapter** sınıfından kalıtılır.
24
+
Bu sınıf **WebSecurityConfigurerAdapter** sınıfından kalıtılır.
23
25
24
-
**config** metodu (HttpSecurity imzalı olanı) **Override** edilir.
26
+
**config** metodu (HttpSecurity imzalı olanı) **Override** edilir.
25
27
26
28
```java
27
29
@Configuration
@@ -35,8 +37,9 @@ public class ApplicationSecurityConfig extends WebSecurityConfigurerAdapter {
35
37
}
36
38
```
37
39
38
-
## 1.3. Authentication Nasıl Yapılır?
39
-
Bu metot üzerinde authentication işleminin nasıl yapılması gerektiği tanımlanır. Basic Authentication ile API güvenliğini sağlayalım.
40
+
## 1.3. Authentication Nasıl Yapılır?
41
+
42
+
Bu metot üzerinde authentication işleminin nasıl yapılması gerektiği tanımlanır. Basic Authentication ile API güvenliğini sağlayalım.
40
43
41
44
```java
42
45
@Configuration
@@ -54,30 +57,29 @@ public class ApplicationSecurityConfig extends WebSecurityConfigurerAdapter {
54
57
}
55
58
```
56
59
57
-
Bu işlem sonucunda herhangi bir kaynak üzerinden GET, POST, PUT ve DELETE işlemlerinin yapılması tavsiye edilir.
58
-
User ve password bilgisi girilmeden hiçbir http isteği yanıtlanmaz iken; user ve password bilgisi bir Authorization header ifadesiyle gönderildiğinde yalnızca GET isteklerinin yanıtlandığı ancak POST, PUT ve DELETE gibi işlemlerin ise yanıtlanmadığı (Forbidden) yani yasaklandığı görülür.
60
+
Bu işlem sonucunda herhangi bir kaynak üzerinden GET, POST, PUT ve DELETE işlemlerinin yapılması tavsiye edilir.
61
+
User ve password bilgisi girilmeden hiçbir http isteği yanıtlanmaz iken; user ve password bilgisi bir Authorization header ifadesiyle gönderildiğinde yalnızca GET isteklerinin yanıtlandığı ancak POST, PUT ve DELETE gibi işlemlerin ise yanıtlanmadığı (Forbidden) yani yasaklandığı görülür.
**UserDetailService** üzerinden kullanıcı tanımları gerçekleştirebilir. Bu noktada kullanıcı bilgilerini tutmak üzere **InMemoryUserDetailsManager** kullanıyoruz.
69
+
**UserDetailService** üzerinden kullanıcı tanımları gerçekleştirebilir. Bu noktada kullanıcı bilgilerini tutmak üzere **InMemoryUserDetailsManager** kullanıyoruz.
68
70
69
-
Ancak **UserDetailService** implemente eden daha farklı sınıflar da vardır. Detaylar için resmi dokümantasyon incelenebilir [Interface UserDetailsService](https://docs.spring.io/spring-security/site/docs/3.2.8.RELEASE/apidocs/org/springframework/security/core/userdetails/UserDetailsService.html).
71
+
Ancak **UserDetailService** implemente eden daha farklı sınıflar da vardır. Detaylar için resmi dokümantasyon incelenebilir [Interface UserDetailsService](https://docs.spring.io/spring-security/site/docs/3.2.8.RELEASE/apidocs/org/springframework/security/core/userdetails/UserDetailsService.html).
70
72
71
-
**UserDetailService** interface yapısını implemente eden sınıflar:
73
+
**UserDetailService** interface yapısını implemente eden sınıflar:
> UserDetailsService de bir konfigürasyon ifadesidir. Bu nedenle @Bean annotation yapısı mutlaka bu metodun üzerine eklenmelidir.
109
112
110
-
Uygulamanın bu haliyle yukarıda verilen kullanıcı adı ve şifreler ile artık API test edilebilir durumdadur.
113
+
Uygulamanın bu haliyle yukarıda verilen kullanıcı adı ve şifreler ile artık API test edilebilir durumdadur.
111
114
112
115
## 2.2 PasswordEncoder
113
116
@@ -122,7 +125,7 @@ public class PasswordConfig {
122
125
}
123
126
```
124
127
125
-
Injection unutulmamalıdır:
128
+
Injection unutulmamalıdır:
126
129
127
130
```java
128
131
privatefinalPasswordEncoder passwordEncoder;
@@ -148,3 +151,112 @@ private final PasswordEncoder passwordEncoder;
148
151
.httpBasic();
149
152
}
150
153
```
154
+
155
+
## 3. Roles and Permissions
156
+
157
+
## 3.1. Google Guava
158
+
159
+
Öncelikle projemize Google Guava bağımlılığını ekleyeceğiz [Google Guava](https://github.com/google/guava).
160
+
161
+
> Guava, yeni koleksiyon türleri (çoklu harita ve çoklu küme gibi), değişmez koleksiyonlar, bir grafik kitaplığı ve eşzamanlılık için yardımcı programları içeren Google'ın temel Java kitaplıkları kümesidir.
162
+
> pom.xml dosyasına aşağıdaki bağımlılık eklenir.
163
+
164
+
```xml
165
+
<dependency>
166
+
<groupId>com.google.guava</groupId>
167
+
<artifactId>guava</artifactId>
168
+
<version>28.1-jre</version>
169
+
</dependency>
170
+
```
171
+
172
+
## 3.2. ApplicationUserRole
173
+
174
+
ApplicationUserRole içerisinde uygulamadaki rol tanımlarını gerçekleştirmeye çalışıyoruz. Bu kapsamda Admin, Editor ve User rollerinin tanımını enum formatında gerçekleştiriyoruz.
> #### Bir role çok sayıda Permission tanımı içerebilir.
195
+
196
+
## 3.3 ApplicationUserPermission
197
+
198
+
**ApplicationUserPermission** da bir **enum** yapısıdır ve kaynaklara ait yazma ya da okuma gibi işlevlerin tanımlanmasını sağlar. Burada tanımlanan izin ifadeleri istenilen Rollere atanabilir.
0 commit comments