2016-05-30 3 views
0

Ich habe eine Service-Methode mit dem Parameter eine Sammlung von Artikel-ID ist als unten:Wie @PreAuthorize mit IDs in einer Sammlung verwenden?

List<Item> getItems(Collection<Long> itemIds) 

Wie kann ich @PreAuthorize verwenden, um es sicher?

Oder sollte ich nur @PostFilter verwenden? Ich möchte die Kontrolle tun, bevor die Methode ausgeführt wird :)

+0

Wenn '@ PreAuthorize 'diesen Zweck erfüllen kann, denke ich, dass es semantisch besser passt. – RichardMZ

Antwort

0

Vielleicht, was Sie wollen, ist @PreFilter:

@PreFilter("hasPermission(filterObject, 'com.example.Item', 'read')") 
List<Item> getItems(Collection<Long> itemIds) 

Beachten Sie, dass Element-IDs, die der Benutzer berechtigt ist, nicht stillschweigend fallen gelassen wird.

+0

Es wirft 'org.springframework.security.acls.domain.IdentityUnavailableException' mit der Nachricht 'Konnte die Identität von Objekt 1 nicht extrahieren' – RichardMZ

+0

@RichardMZ Sind Sie sicher, dass Sie 'hasPermission' mit 3 Parametern aufrufen? Diese Methode sollte diese Ausnahme nicht auslösen. – holmis83

+0

Entschuldigung. Was ich sagte, ist die Ausnahme und die Nachricht in der HttpResponse angezeigt. Die Ausnahme in der Konsole ist 'java.lang.NoSuchMethodException: java.lang.Long.getId()'. Und ich habe 'hasPermission' mit 3 Parametern aufgerufen :) – RichardMZ