@ -21,6 +21,7 @@ import org.junit.After;
@@ -21,6 +21,7 @@ import org.junit.After;
import org.springframework.beans.BeansException
import org.springframework.beans.factory.config.BeanPostProcessor
import org.springframework.security.config.annotation.authentication.configurers.GlobalAuthenticationConfigurerAdapter
import org.springframework.security.config.annotation.method.configuration.NamespaceGlobalMethodSecurityTests.BaseMethodConfig ;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter
import javax.sql.DataSource
@ -428,4 +429,45 @@ public class GlobalMethodSecurityConfigurationTests extends BaseSpringSpec {
@@ -428,4 +429,45 @@ public class GlobalMethodSecurityConfigurationTests extends BaseSpringSpec {
auth . inMemoryAuthentication ( )
}
}
// gh - 3797
def preAuthorizeBeanSpel ( ) {
setup:
SecurityContextHolder . getContext ( ) . setAuthentication (
new TestingAuthenticationToken ( "user" , "password" , "ROLE_USER" ) )
context = new AnnotationConfigApplicationContext ( PreAuthorizeBeanSpelConfig )
BeanSpelService service = context . getBean ( BeanSpelService )
when:
service . run ( true )
then:
noExceptionThrown ( )
when:
service . run ( false )
then:
thrown ( AccessDeniedException )
}
@EnableGlobalMethodSecurity ( prePostEnabled = true )
@Configuration
public static class PreAuthorizeBeanSpelConfig extends BaseMethodConfig {
@Bean
BeanSpelService service ( ) {
return new BeanSpelService ( ) ;
}
@Bean
BeanSpelSecurity security ( ) {
return new BeanSpelSecurity ( ) ;
}
}
static class BeanSpelService {
@PreAuthorize ( "@security.check(#arg)" )
void run ( boolean arg ) { }
}
static class BeanSpelSecurity {
public boolean check ( boolean arg ) {
return arg ;
}
}
}