|
|
|
@ -24,6 +24,9 @@ import org.springframework.context.ApplicationListener; |
|
|
|
import org.springframework.context.annotation.Bean; |
|
|
|
import org.springframework.context.annotation.Bean; |
|
|
|
import org.springframework.context.annotation.Configuration |
|
|
|
import org.springframework.context.annotation.Configuration |
|
|
|
import org.springframework.core.annotation.Order |
|
|
|
import org.springframework.core.annotation.Order |
|
|
|
|
|
|
|
import org.springframework.expression.ExpressionParser; |
|
|
|
|
|
|
|
import org.springframework.mock.web.MockHttpServletRequest; |
|
|
|
|
|
|
|
import org.springframework.security.access.expression.SecurityExpressionHandler; |
|
|
|
import org.springframework.security.authentication.AuthenticationManager |
|
|
|
import org.springframework.security.authentication.AuthenticationManager |
|
|
|
import org.springframework.security.authentication.event.AuthenticationSuccessEvent; |
|
|
|
import org.springframework.security.authentication.event.AuthenticationSuccessEvent; |
|
|
|
import org.springframework.security.config.annotation.BaseSpringSpec |
|
|
|
import org.springframework.security.config.annotation.BaseSpringSpec |
|
|
|
@ -36,7 +39,9 @@ import org.springframework.security.web.access.DefaultWebInvocationPrivilegeEval |
|
|
|
import org.springframework.security.web.access.WebInvocationPrivilegeEvaluator; |
|
|
|
import org.springframework.security.web.access.WebInvocationPrivilegeEvaluator; |
|
|
|
import org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler; |
|
|
|
import org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler; |
|
|
|
import org.springframework.security.web.access.expression.WebSecurityExpressionHandler; |
|
|
|
import org.springframework.security.web.access.expression.WebSecurityExpressionHandler; |
|
|
|
|
|
|
|
import org.springframework.security.web.access.intercept.FilterSecurityInterceptor; |
|
|
|
import org.springframework.security.web.util.AnyRequestMatcher |
|
|
|
import org.springframework.security.web.util.AnyRequestMatcher |
|
|
|
|
|
|
|
import org.springframework.test.util.ReflectionTestUtils; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* @author Rob Winch |
|
|
|
* @author Rob Winch |
|
|
|
@ -197,11 +202,13 @@ class WebSecurityConfigurationTests extends BaseSpringSpec { |
|
|
|
def "Override webSecurityExpressionHandler"() { |
|
|
|
def "Override webSecurityExpressionHandler"() { |
|
|
|
setup: |
|
|
|
setup: |
|
|
|
WebSecurityExpressionHandler expressionHandler = Mock() |
|
|
|
WebSecurityExpressionHandler expressionHandler = Mock() |
|
|
|
|
|
|
|
ExpressionParser parser = Mock() |
|
|
|
WebSecurityExpressionHandlerConfig.EH = expressionHandler |
|
|
|
WebSecurityExpressionHandlerConfig.EH = expressionHandler |
|
|
|
when: |
|
|
|
when: |
|
|
|
loadConfig(WebSecurityExpressionHandlerConfig) |
|
|
|
loadConfig(WebSecurityExpressionHandlerConfig) |
|
|
|
then: |
|
|
|
then: |
|
|
|
context.getBean(WebSecurityExpressionHandler) == expressionHandler |
|
|
|
context.getBean(WebSecurityExpressionHandler) == expressionHandler |
|
|
|
|
|
|
|
1 * expressionHandler.getExpressionParser() >> parser |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@EnableWebSecurity |
|
|
|
@EnableWebSecurity |
|
|
|
@ -215,6 +222,13 @@ class WebSecurityConfigurationTests extends BaseSpringSpec { |
|
|
|
web |
|
|
|
web |
|
|
|
.expressionHandler(EH) |
|
|
|
.expressionHandler(EH) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
protected void configure(HttpSecurity http) throws Exception { |
|
|
|
|
|
|
|
http |
|
|
|
|
|
|
|
.authorizeRequests() |
|
|
|
|
|
|
|
.expressionHandler(EH) |
|
|
|
|
|
|
|
.anyRequest().authenticated() |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
def "#138 webSecurityExpressionHandler defaults"() { |
|
|
|
def "#138 webSecurityExpressionHandler defaults"() { |
|
|
|
@ -257,4 +271,46 @@ class WebSecurityConfigurationTests extends BaseSpringSpec { |
|
|
|
.anyRequest().authenticated() |
|
|
|
.anyRequest().authenticated() |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def "SEC-2303: DefaultExpressionHandler has bean resolver set"() { |
|
|
|
|
|
|
|
when: |
|
|
|
|
|
|
|
loadConfig(DefaultExpressionHandlerSetsBeanResolverConfig) |
|
|
|
|
|
|
|
then: "the exposed bean has a BeanResolver set" |
|
|
|
|
|
|
|
ReflectionTestUtils.getField(context.getBean(SecurityExpressionHandler),"br") |
|
|
|
|
|
|
|
when: |
|
|
|
|
|
|
|
springSecurityFilterChain.doFilter(request, response, chain) |
|
|
|
|
|
|
|
then: "we can use the BeanResolver with a grant" |
|
|
|
|
|
|
|
noExceptionThrown() |
|
|
|
|
|
|
|
when: "we can use the Beanresolver with a deny" |
|
|
|
|
|
|
|
springSecurityFilterChain.doFilter(new MockHttpServletRequest(method:'POST'), response, chain) |
|
|
|
|
|
|
|
then: |
|
|
|
|
|
|
|
noExceptionThrown() |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@EnableWebSecurity |
|
|
|
|
|
|
|
@Configuration |
|
|
|
|
|
|
|
static class DefaultExpressionHandlerSetsBeanResolverConfig extends WebSecurityConfigurerAdapter { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
protected void configure(HttpSecurity http) throws Exception { |
|
|
|
|
|
|
|
http |
|
|
|
|
|
|
|
.authorizeRequests() |
|
|
|
|
|
|
|
.anyRequest().access("request.method == 'GET' ? @b.grant() : @b.deny()") |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
|
|
|
|
public MyBean b() { |
|
|
|
|
|
|
|
new MyBean() |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static class MyBean { |
|
|
|
|
|
|
|
boolean deny() { |
|
|
|
|
|
|
|
false |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
boolean grant() { |
|
|
|
|
|
|
|
true |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|