2015-12-31 25 views
5

Tôi chỉ là người mới bắt đầu trong Spring Security, nhưng tôi muốn biết là có thể định cấu hình keycloak theo cách tôi có thể sử dụng @PreAuthorize, @PostAuthorize, @Secured và các chú thích khác. Ví dụ, tôi đã cấu hình keycloak-spring-security-adapter và mùa xuân an đơn giản webapp Xuân Nghỉ ngơi của tôi để tôi được tiếp cận với đối tượng chính trong bộ điều khiển của tôi, như thế này:Sử dụng chú thích bảo mật mùa xuân với keycloak

@RestController 
public class TMSRestController { 

    @RequestMapping("/greeting") 
    public Greeting greeting(Principal principal, @RequestParam(value="name") String name) { 
     return new Greeting(String.format(template, name)); 
    } 
... 
} 

Nhưng khi tôi cố gắng này (chỉ là ví dụ , thực sự tôi muốn thực hiện tùy chỉnh biểu EL trước khi uỷ quyền):

@RestController 
public class TMSRestController { 

    @RequestMapping("/greeting") 
    @PreAuthorize("hasRole('ADMIN')") 
    public Greeting greeting(Principal principal, @RequestParam(value="name") String name) { 
     return new Greeting(String.format(template, name)); 
    } 
... 
} 

tôi nhận được ngoại lệ:

org.springframework.security.authentication. AuthenticationCredentialsNotFoundException: Một đối tượng xác thực không được tìm thấy trong SecurityContext

Trong cấu hình an ninh mùa xuân của tôi, tôi cho phép an ninh phương pháp toàn cầu:

gì tôi cần phải làm cho chú thích an ninh mùa xuân làm việc? Có thể sử dụng chú thích này trong ngữ cảnh này không?

Trả lời

3

Bạn vẫn phải định cấu hình Spring Security bằng Keycloak. Hãy xem adapter documentation để biết cấu hình dựa trên chú thích. Khi đã thiết lập, chú thích Bảo mật mùa xuân của bạn sẽ hoạt động trên các cuộc gọi được ủy quyền.

+0

Câu trả lời là cách đây một thời gian, nhưng tôi có một số vấn đề tương tự với Spring Security và Keycloak. Trong ứng dụng Khởi động mùa xuân, tôi đã cấu hình bộ điều hợp nhưng không thể sử dụng '@PreAuthorize (" hasAuthority ('user') ")'. Nếu yêu cầu được gửi, chú thích sẽ không có hiệu lực. Tôi đã sửa nó ngay bây giờ bằng cách thêm '@EnableGlobalMethodSecurity (prePostEnabled = true)' vào cấu hình bảo mật của mình. – hesch

Các vấn đề liên quan