Giriş
Yetkilendirme için kullanılır. Metodların üstüne eklenir. Kodun "Authenticated user" tarafından çağrılmasını sağlar. @Service, @RestController gibi sınıflar ile birlikte kullanılabilir.
Metoda girmeden önce çalışır. Açıklaması şöyle.
Bu anotasyonun kardeşi @PostAuthorize.
Yetkilendirme için kullanılır. Metodların üstüne eklenir. Kodun "Authenticated user" tarafından çağrılmasını sağlar. @Service, @RestController gibi sınıflar ile birlikte kullanılabilir.
Metoda girmeden önce çalışır. Açıklaması şöyle.
The @PreAuthorize as name suggest can check for authorization before entering into method. The @PreAuthorize authorizes on the basis of role or the argument which is passed to the method.Sanırım bu anotasyonun çalışması için WebSecurityConfigurerAdapter sınıfına @EnableGlobalMethodSecurity(prePostEnabled = true) yapılması gerekir.
Bu anotasyonun kardeşi @PostAuthorize.
Bu anotasyon yerine kendimiz de AOP ile yetkilendirme yapabiliriz. Bir örnek burada
hasXX() Kontrolleri - Derleme Zamanı İsimler
Açıklaması şöyle.
hasXX() Kontrolleri - Derleme Zamanı İsimler
Açıklaması şöyle.
That implies that we know all possible roles, permissions, etc at compile time.hasPermission(), hasRole(), hasAuthority() gibi security expressionları destekler.
Kontrol Başarısız İse
Açıklaması şöyle
Açıklaması şöyle
If this authority is missing then 403 Forbidden will be returned.
Metin Yerine Enum Kullanma
hasXX() metodları içine verilen metin yerine Enum kullanılabilir.
Örnek
Şöyle yaparız
@PreAuthorize("hasAuthority(T(com.example.SecurityAuthorities).USER)")
@GetMapping("...", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(OK)
public ResponseEntity<GetExpensesResponseDto> getExpenses(){
...
}
Sadece Bean Sınıfılarda KullanılabilirAçıklaması şöyle.
hasPermission() Security Expression KullanımıThe annotated methods will only be secured for instances which are defined as Spring beans (in the same application context in which method-security is enabled).
hasPermission() metodu PermissionEvaluator arayüzünden gelir.
Örnek
Şöyle yaparız.
@PreAuthorize("hasPermission(object, permission)")
public void someMethod(...);
hasRole() Security Expression KullanımıÖrnek
Şöyle yaparız.
@RestController
public class TestController {
@GetMapping("/public")
public String testPublic(){
return "Welcome to the public place";
}
@GetMapping("/private")
@PreAuthorize("hasRole('USER')")
public String testPrivate(){
return "Welcome to the private place";
}
@GetMapping("/admin")
@PreAuthorize("hasRole('ADMIN')")
public String testAdmin(){
return "Welcome to the admin place";
}
}
Örnek - hasRole ve orElimde şöyle bir kod olsun
@Service
public class SomeService {
public void findOne(Long id) {
...
}
}
Şöyle yaparız.@PreAuthorize(hasRole('ROLE_VIEWER') or hasRole('ROLE_EDITOR') or
#id == authentication.principal.username"")
ÖrnekŞöyle yaparız.
@PreAuthorize("hasRole('ROLE_A') or hasRole('ROLE_B')")
public void yourMethod() {
// ...
}
Kendi Security Expression Metodumuz- Eğer kendi security expression'ımızı yazmak istersek SecurityExpressionRoot sınıfından kalıtmamız gerekir. Kendi security expression sınıfımı GlobalMethodSecurityConfiguration sınıfına tanıtmak gerekir.
Örnek
Kendi custom security metodumu çağırmak için şöyle yaparız
@PreAuthorize("isProfileOwner(#id)")
@GetMapping("{id}")
public String show(@PathVariable("id") Long id, Model model) {
//omitted
}
Hiç yorum yok:
Yorum Gönder