Gliffy |
---|
imageAttachmentId | att1100709951 |
---|
baseUrl | https://sundsvall.atlassian.net/wiki |
---|
name | auktoriseringÄrendehantering Copy |
---|
diagramAttachmentId | att1100447841 |
---|
containerId | 1100349446 |
---|
|
Genom att använda denna starter så möjliggörs stöd för mer finkornig behörighetshantering av API-resurser när sådant behov uppstår. Funktionaliteten bygger på att klienten skapar ett signerat Java Web Token (JWT) innehållandes den användarinformation som krävs för att kontrollera användarens behörighet. Informationen skickas med i anropet till tjänsten, där den sedan används för att kontrollera behörighet till i första hand resurserna i klassen som specificerar API-resurserna.
Övergripande lösningsbeskrivning
Gliffy |
---|
imageAttachmentId | att1100709951 |
---|
baseUrl | https://sundsvall.atlassian.net/wiki |
---|
name | auktoriseringÄrendehantering Copy |
---|
diagramAttachmentId | att1100447841 |
---|
containerId | 1100349446 |
---|
|
Utökad behörighetskontroll i tjänst
För att få tillgång till modulens funktionalitet, lägg till följande i tjänstens pom.xml
:
...
Code Block |
---|
|
@Component
public class AccessAuthorizer {
public boolean authorize(Authentication authentication, Category category) {
final AtomicBoolean hasAccess = new AtomicBoolean(false);
authentication.getAuthorities().forEach(auth -> {
GenericGrantedAuthority generic = (GenericGrantedAuthority)auth;
hasAccess.compareAndExchange(false,
generic.hasAuthority("write",
String.format("$.[?(@ ==\"%s\")]", category.name())));
});
return hasAccess.get();
}
} |
Lägg till någon av ovanstående annoteringar för till en auktorisering-annotering till den resurs som ska behörighetsskyddas. I detta exempel används @PreAuthorize
.
Code Block |
---|
|
@GetMapping(path = "/cases/{category}", produces = { APPLICATION_JSON_VALUE })
@Operation(summary = "Get agreementscases by category")
@ApiResponse(responseCode = "200", description = "Successful operation")
@ApiResponse(responseCode = "400", description = "Bad request")
@ApiResponse(responseCode = "401", description = "Unauthorized")
@ApiResponse(responseCode = "404", description = "Not found")
@ApiResponse(responseCode = "500", description = "Internal Server error")
@ApiResponse(responseCode = "502", description = "Bad Gateway")
@PreAuthorize("@accessAuthorizer.authorize(authentication, #category)")
public ResponseEntity<AgreementResponse>ResponseEntity<CasesResponse> getAgreementsByCategorygetCasesByCategory(
@Parameter(name = "category") @PathVariable(name = "category") Category category) {
...
} |
...