Update to use @EnableMethodSecurity from Spring Security 6.

This commit is contained in:
Tim Donohue
2024-03-12 16:51:24 -05:00
parent cb72fa2e5f
commit 3f26333059

View File

@@ -8,28 +8,31 @@
package org.dspace.app.rest.security;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.access.PermissionEvaluator;
import org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler;
import org.springframework.security.access.expression.method.MethodSecurityExpressionHandler;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
/**
* This EnableMethodSecurity configuration enables Spring Security annotation checks on all methods
* (e.g. @PreAuthorize, @PostAuthorize annotations, etc.)
*/
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
@EnableMethodSecurity
public class MethodSecurityConfig {
@Autowired
private PermissionEvaluator dSpacePermissionEvaluator;
@Autowired
private ApplicationContext applicationContext;
@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
/**
* Tell Spring to use our custom PermissionEvaluator as part of method security.
* This allows DSpacePermissionEvaluator to be used in @PreAuthorize annotations (and similar).
* @see org.dspace.app.rest.security.DSpacePermissionEvaluator
*/
@Bean
MethodSecurityExpressionHandler methodSecurityExpressionHandler() {
DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler();
expressionHandler.setApplicationContext(applicationContext);
expressionHandler.setPermissionEvaluator(dSpacePermissionEvaluator);
return expressionHandler;
}