Allow configuration of authorize requests through nested builder
Issue: gh-5557
This commit is contained in:
parent
1445d1b012
commit
81d3cf1e7b
|
@ -548,9 +548,10 @@ public final class HttpSecurity extends
|
||||||
* @Override
|
* @Override
|
||||||
* protected void configure(HttpSecurity http) throws Exception {
|
* protected void configure(HttpSecurity http) throws Exception {
|
||||||
* http
|
* http
|
||||||
* .authorizeRequests()
|
* .authorizeRequests(authorizeRequests ->
|
||||||
* .anyRequest().hasRole("USER")
|
* authorizeRequests
|
||||||
* .and()
|
* .anyRequest().hasRole("USER")
|
||||||
|
* )
|
||||||
* .formLogin(formLogin ->
|
* .formLogin(formLogin ->
|
||||||
* formLogin
|
* formLogin
|
||||||
* .permitAll()
|
* .permitAll()
|
||||||
|
@ -769,9 +770,10 @@ public final class HttpSecurity extends
|
||||||
* @Override
|
* @Override
|
||||||
* protected void configure(HttpSecurity http) throws Exception {
|
* protected void configure(HttpSecurity http) throws Exception {
|
||||||
* http
|
* http
|
||||||
* .authorizeRequests()
|
* .authorizeRequests(authorizeRequests ->
|
||||||
* .antMatchers("/**").hasRole("USER")
|
* authorizeRequests
|
||||||
* .and()
|
* .antMatchers("/**").hasRole("USER")
|
||||||
|
* )
|
||||||
* .jee(jee ->
|
* .jee(jee ->
|
||||||
* jee
|
* jee
|
||||||
* .mappableRoles("USER", "ADMIN")
|
* .mappableRoles("USER", "ADMIN")
|
||||||
|
@ -878,10 +880,10 @@ public final class HttpSecurity extends
|
||||||
* @Override
|
* @Override
|
||||||
* protected void configure(HttpSecurity http) throws Exception {
|
* protected void configure(HttpSecurity http) throws Exception {
|
||||||
* http
|
* http
|
||||||
* .authorizeRequests()
|
* .authorizeRequests(authorizeRequests ->
|
||||||
* .antMatchers("/**")
|
* authorizeRequests
|
||||||
* .hasRole("USER")
|
* .antMatchers("/**").hasRole("USER")
|
||||||
* .and()
|
* )
|
||||||
* .x509(withDefaults());
|
* .x509(withDefaults());
|
||||||
* }
|
* }
|
||||||
* }
|
* }
|
||||||
|
@ -952,9 +954,10 @@ public final class HttpSecurity extends
|
||||||
* @Override
|
* @Override
|
||||||
* protected void configure(HttpSecurity http) throws Exception {
|
* protected void configure(HttpSecurity http) throws Exception {
|
||||||
* http
|
* http
|
||||||
* .authorizeRequests()
|
* .authorizeRequests(authorizeRequests ->
|
||||||
* .antMatchers("/**").hasRole("USER")
|
* authorizeRequests
|
||||||
* .and()
|
* .antMatchers("/**").hasRole("USER")
|
||||||
|
* )
|
||||||
* .formLogin(withDefaults())
|
* .formLogin(withDefaults())
|
||||||
* .rememberMe(withDefaults());
|
* .rememberMe(withDefaults());
|
||||||
* }
|
* }
|
||||||
|
@ -1042,6 +1045,91 @@ public final class HttpSecurity extends
|
||||||
.getRegistry();
|
.getRegistry();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows restricting access based upon the {@link HttpServletRequest} using
|
||||||
|
* {@link RequestMatcher} implementations (i.e. via URL patterns).
|
||||||
|
*
|
||||||
|
* <h2>Example Configurations</h2>
|
||||||
|
*
|
||||||
|
* The most basic example is to configure all URLs to require the role "ROLE_USER".
|
||||||
|
* The configuration below requires authentication to every URL and will grant access
|
||||||
|
* to both the user "admin" and "user".
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* @Configuration
|
||||||
|
* @EnableWebSecurity
|
||||||
|
* public class AuthorizeUrlsSecurityConfig extends WebSecurityConfigurerAdapter {
|
||||||
|
*
|
||||||
|
* @Override
|
||||||
|
* protected void configure(HttpSecurity http) throws Exception {
|
||||||
|
* http
|
||||||
|
* .authorizeRequests(authorizeRequests ->
|
||||||
|
* authorizeRequests
|
||||||
|
* .antMatchers("/**").hasRole("USER")
|
||||||
|
* )
|
||||||
|
* .formLogin(withDefaults());
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* We can also configure multiple URLs. The configuration below requires
|
||||||
|
* authentication to every URL and will grant access to URLs starting with /admin/ to
|
||||||
|
* only the "admin" user. All other URLs either user can access.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* @Configuration
|
||||||
|
* @EnableWebSecurity
|
||||||
|
* public class AuthorizeUrlsSecurityConfig extends WebSecurityConfigurerAdapter {
|
||||||
|
*
|
||||||
|
* @Override
|
||||||
|
* protected void configure(HttpSecurity http) throws Exception {
|
||||||
|
* http
|
||||||
|
* .authorizeRequests(authorizeRequests ->
|
||||||
|
* authorizeRequests
|
||||||
|
* .antMatchers("/admin/**").hasRole("ADMIN")
|
||||||
|
* .antMatchers("/**").hasRole("USER")
|
||||||
|
* )
|
||||||
|
* .formLogin(withDefaults());
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* Note that the matchers are considered in order. Therefore, the following is invalid
|
||||||
|
* because the first matcher matches every request and will never get to the second
|
||||||
|
* mapping:
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* @Configuration
|
||||||
|
* @EnableWebSecurity
|
||||||
|
* public class AuthorizeUrlsSecurityConfig extends WebSecurityConfigurerAdapter {
|
||||||
|
*
|
||||||
|
* @Override
|
||||||
|
* protected void configure(HttpSecurity http) throws Exception {
|
||||||
|
* http
|
||||||
|
* .authorizeRequests(authorizeRequests ->
|
||||||
|
* authorizeRequests
|
||||||
|
* .antMatchers("/**").hasRole("USER")
|
||||||
|
* .antMatchers("/admin/**").hasRole("ADMIN")
|
||||||
|
* );
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @see #requestMatcher(RequestMatcher)
|
||||||
|
*
|
||||||
|
* @param authorizeRequestsCustomizer the {@link Customizer} to provide more options for
|
||||||
|
* the {@link ExpressionUrlAuthorizationConfigurer.ExpressionInterceptUrlRegistry}
|
||||||
|
* @return the {@link HttpSecurity} for further customizations
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public HttpSecurity authorizeRequests(Customizer<ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry> authorizeRequestsCustomizer)
|
||||||
|
throws Exception {
|
||||||
|
ApplicationContext context = getContext();
|
||||||
|
authorizeRequestsCustomizer.customize(getOrApply(new ExpressionUrlAuthorizationConfigurer<>(context))
|
||||||
|
.getRegistry());
|
||||||
|
return HttpSecurity.this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allows configuring the Request Cache. For example, a protected page (/protected)
|
* Allows configuring the Request Cache. For example, a protected page (/protected)
|
||||||
* may be requested prior to authentication. The application will redirect the user to
|
* may be requested prior to authentication. The application will redirect the user to
|
||||||
|
@ -1075,9 +1163,10 @@ public final class HttpSecurity extends
|
||||||
* @Override
|
* @Override
|
||||||
* protected void configure(HttpSecurity http) throws Exception {
|
* protected void configure(HttpSecurity http) throws Exception {
|
||||||
* http
|
* http
|
||||||
* .authorizeRequests()
|
* .authorizeRequests(authorizeRequests ->
|
||||||
* .antMatchers("/**").hasRole("USER")
|
* authorizeRequests
|
||||||
* .and()
|
* .antMatchers("/**").hasRole("USER")
|
||||||
|
* )
|
||||||
* .requestCache(requestCache ->
|
* .requestCache(requestCache ->
|
||||||
* requestCache.disable()
|
* requestCache.disable()
|
||||||
* );
|
* );
|
||||||
|
@ -1124,9 +1213,10 @@ public final class HttpSecurity extends
|
||||||
* @Override
|
* @Override
|
||||||
* protected void configure(HttpSecurity http) throws Exception {
|
* protected void configure(HttpSecurity http) throws Exception {
|
||||||
* http
|
* http
|
||||||
* .authorizeRequests()
|
* .authorizeRequests(authorizeRequests ->
|
||||||
* .antMatchers("/**").hasRole("USER")
|
* authorizeRequests
|
||||||
* .and()
|
* .antMatchers("/**").hasRole("USER")
|
||||||
|
* )
|
||||||
* // sample exception handling customization
|
* // sample exception handling customization
|
||||||
* .exceptionHandling(exceptionHandling ->
|
* .exceptionHandling(exceptionHandling ->
|
||||||
* exceptionHandling
|
* exceptionHandling
|
||||||
|
@ -1288,9 +1378,10 @@ public final class HttpSecurity extends
|
||||||
* @Override
|
* @Override
|
||||||
* protected void configure(HttpSecurity http) throws Exception {
|
* protected void configure(HttpSecurity http) throws Exception {
|
||||||
* http
|
* http
|
||||||
* .authorizeRequests()
|
* .authorizeRequests(authorizeRequests ->
|
||||||
* .antMatchers("/**").hasRole("USER")
|
* authorizeRequests
|
||||||
* .and()
|
* .antMatchers("/**").hasRole("USER")
|
||||||
|
* )
|
||||||
* .formLogin(withDefaults())
|
* .formLogin(withDefaults())
|
||||||
* // sample logout customization
|
* // sample logout customization
|
||||||
* .logout(logout ->
|
* .logout(logout ->
|
||||||
|
@ -1460,9 +1551,10 @@ public final class HttpSecurity extends
|
||||||
* @Override
|
* @Override
|
||||||
* protected void configure(HttpSecurity http) throws Exception {
|
* protected void configure(HttpSecurity http) throws Exception {
|
||||||
* http
|
* http
|
||||||
* .authorizeRequests()
|
* .authorizeRequests(authorizeRequests ->
|
||||||
* .antMatchers("/**").hasRole("USER")
|
* authorizeRequests
|
||||||
* .and()
|
* .antMatchers("/**").hasRole("USER")
|
||||||
|
* )
|
||||||
* .formLogin(withDefaults());
|
* .formLogin(withDefaults());
|
||||||
* }
|
* }
|
||||||
* }
|
* }
|
||||||
|
@ -1478,9 +1570,10 @@ public final class HttpSecurity extends
|
||||||
* @Override
|
* @Override
|
||||||
* protected void configure(HttpSecurity http) throws Exception {
|
* protected void configure(HttpSecurity http) throws Exception {
|
||||||
* http
|
* http
|
||||||
* .authorizeRequests()
|
* .authorizeRequests(authorizeRequests ->
|
||||||
* .antMatchers("/**").hasRole("USER")
|
* authorizeRequests
|
||||||
* .and()
|
* .antMatchers("/**").hasRole("USER")
|
||||||
|
* )
|
||||||
* .formLogin(formLogin ->
|
* .formLogin(formLogin ->
|
||||||
* formLogin
|
* formLogin
|
||||||
* .usernameParameter("username")
|
* .usernameParameter("username")
|
||||||
|
@ -1717,9 +1810,10 @@ public final class HttpSecurity extends
|
||||||
* @Override
|
* @Override
|
||||||
* protected void configure(HttpSecurity http) throws Exception {
|
* protected void configure(HttpSecurity http) throws Exception {
|
||||||
* http
|
* http
|
||||||
* .authorizeRequests()
|
* .authorizeRequests(authorizeRequests ->
|
||||||
* .antMatchers("/**").hasRole("USER")
|
* authorizeRequests
|
||||||
* .and()
|
* .antMatchers("/**").hasRole("USER")
|
||||||
|
* )
|
||||||
* .httpBasic(withDefaults());
|
* .httpBasic(withDefaults());
|
||||||
* }
|
* }
|
||||||
* }
|
* }
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2015 the original author or authors.
|
* Copyright 2002-2019 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -49,6 +49,7 @@ import org.springframework.web.servlet.config.annotation.EnableWebMvc;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
|
import static org.springframework.security.config.Customizer.withDefaults;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Rob Winch
|
* @author Rob Winch
|
||||||
|
@ -113,6 +114,39 @@ public class AuthorizeRequestsTests {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void postWhenPostDenyAllInLambdaThenRespondsWithForbidden() throws Exception {
|
||||||
|
loadConfig(AntMatchersNoPatternsInLambdaConfig.class);
|
||||||
|
this.request.setMethod("POST");
|
||||||
|
|
||||||
|
this.springSecurityFilterChain.doFilter(this.request, this.response, this.chain);
|
||||||
|
|
||||||
|
assertThat(this.response.getStatus()).isEqualTo(HttpServletResponse.SC_FORBIDDEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EnableWebSecurity
|
||||||
|
@Configuration
|
||||||
|
static class AntMatchersNoPatternsInLambdaConfig extends WebSecurityConfigurerAdapter {
|
||||||
|
@Override
|
||||||
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
|
// @formatter:off
|
||||||
|
http
|
||||||
|
.authorizeRequests(authorizeRequests ->
|
||||||
|
authorizeRequests
|
||||||
|
.antMatchers(HttpMethod.POST).denyAll()
|
||||||
|
);
|
||||||
|
// @formatter:on
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
|
||||||
|
// @formatter:off
|
||||||
|
auth
|
||||||
|
.inMemoryAuthentication();
|
||||||
|
// @formatter:on
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// SEC-2256
|
// SEC-2256
|
||||||
@Test
|
@Test
|
||||||
public void antMatchersPathVariables() throws Exception {
|
public void antMatchersPathVariables() throws Exception {
|
||||||
|
@ -314,6 +348,66 @@ public class AuthorizeRequestsTests {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void requestWhenMvcMatcherDenyAllThenRespondsWithUnauthorized() throws Exception {
|
||||||
|
loadConfig(MvcMatcherInLambdaConfig.class);
|
||||||
|
|
||||||
|
this.request.setRequestURI("/path");
|
||||||
|
this.springSecurityFilterChain.doFilter(this.request, this.response, this.chain);
|
||||||
|
|
||||||
|
assertThat(this.response.getStatus())
|
||||||
|
.isEqualTo(HttpServletResponse.SC_UNAUTHORIZED);
|
||||||
|
|
||||||
|
setup();
|
||||||
|
|
||||||
|
this.request.setRequestURI("/path.html");
|
||||||
|
this.springSecurityFilterChain.doFilter(this.request, this.response, this.chain);
|
||||||
|
|
||||||
|
assertThat(this.response.getStatus())
|
||||||
|
.isEqualTo(HttpServletResponse.SC_UNAUTHORIZED);
|
||||||
|
|
||||||
|
setup();
|
||||||
|
|
||||||
|
this.request.setServletPath("/path/");
|
||||||
|
this.springSecurityFilterChain.doFilter(this.request, this.response, this.chain);
|
||||||
|
|
||||||
|
assertThat(this.response.getStatus())
|
||||||
|
.isEqualTo(HttpServletResponse.SC_UNAUTHORIZED);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EnableWebSecurity
|
||||||
|
@Configuration
|
||||||
|
@EnableWebMvc
|
||||||
|
static class MvcMatcherInLambdaConfig extends WebSecurityConfigurerAdapter {
|
||||||
|
@Override
|
||||||
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
|
// @formatter:off
|
||||||
|
http
|
||||||
|
.httpBasic(withDefaults())
|
||||||
|
.authorizeRequests(authorizeRequests ->
|
||||||
|
authorizeRequests
|
||||||
|
.mvcMatchers("/path").denyAll()
|
||||||
|
);
|
||||||
|
// @formatter:on
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
|
||||||
|
// @formatter:off
|
||||||
|
auth
|
||||||
|
.inMemoryAuthentication();
|
||||||
|
// @formatter:on
|
||||||
|
}
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
static class PathController {
|
||||||
|
@RequestMapping("/path")
|
||||||
|
public String path() {
|
||||||
|
return "path";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void mvcMatcherServletPath() throws Exception {
|
public void mvcMatcherServletPath() throws Exception {
|
||||||
loadConfig(MvcMatcherServletPathConfig.class);
|
loadConfig(MvcMatcherServletPathConfig.class);
|
||||||
|
@ -391,6 +485,85 @@ public class AuthorizeRequestsTests {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void requestWhenMvcMatcherServletPathDenyAllThenMatchesOnServletPath() throws Exception {
|
||||||
|
loadConfig(MvcMatcherServletPathInLambdaConfig.class);
|
||||||
|
|
||||||
|
this.request.setServletPath("/spring");
|
||||||
|
this.request.setRequestURI("/spring/path");
|
||||||
|
this.springSecurityFilterChain.doFilter(this.request, this.response, this.chain);
|
||||||
|
|
||||||
|
assertThat(this.response.getStatus())
|
||||||
|
.isEqualTo(HttpServletResponse.SC_UNAUTHORIZED);
|
||||||
|
|
||||||
|
setup();
|
||||||
|
|
||||||
|
this.request.setServletPath("/spring");
|
||||||
|
this.request.setRequestURI("/spring/path.html");
|
||||||
|
this.springSecurityFilterChain.doFilter(this.request, this.response, this.chain);
|
||||||
|
|
||||||
|
assertThat(this.response.getStatus())
|
||||||
|
.isEqualTo(HttpServletResponse.SC_UNAUTHORIZED);
|
||||||
|
|
||||||
|
setup();
|
||||||
|
|
||||||
|
this.request.setServletPath("/spring");
|
||||||
|
this.request.setRequestURI("/spring/path/");
|
||||||
|
this.springSecurityFilterChain.doFilter(this.request, this.response, this.chain);
|
||||||
|
|
||||||
|
assertThat(this.response.getStatus())
|
||||||
|
.isEqualTo(HttpServletResponse.SC_UNAUTHORIZED);
|
||||||
|
|
||||||
|
setup();
|
||||||
|
|
||||||
|
this.request.setServletPath("/foo");
|
||||||
|
this.request.setRequestURI("/foo/path");
|
||||||
|
this.springSecurityFilterChain.doFilter(this.request, this.response, this.chain);
|
||||||
|
|
||||||
|
assertThat(this.response.getStatus()).isEqualTo(HttpServletResponse.SC_OK);
|
||||||
|
|
||||||
|
setup();
|
||||||
|
|
||||||
|
this.request.setServletPath("/");
|
||||||
|
this.request.setRequestURI("/path");
|
||||||
|
this.springSecurityFilterChain.doFilter(this.request, this.response, this.chain);
|
||||||
|
|
||||||
|
assertThat(this.response.getStatus()).isEqualTo(HttpServletResponse.SC_OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EnableWebSecurity
|
||||||
|
@Configuration
|
||||||
|
@EnableWebMvc
|
||||||
|
static class MvcMatcherServletPathInLambdaConfig extends WebSecurityConfigurerAdapter {
|
||||||
|
@Override
|
||||||
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
|
// @formatter:off
|
||||||
|
http
|
||||||
|
.httpBasic(withDefaults())
|
||||||
|
.authorizeRequests(authorizeRequests ->
|
||||||
|
authorizeRequests
|
||||||
|
.mvcMatchers("/path").servletPath("/spring").denyAll()
|
||||||
|
);
|
||||||
|
// @formatter:on
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
|
||||||
|
// @formatter:off
|
||||||
|
auth
|
||||||
|
.inMemoryAuthentication();
|
||||||
|
// @formatter:on
|
||||||
|
}
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
static class PathController {
|
||||||
|
@RequestMapping("/path")
|
||||||
|
public String path() {
|
||||||
|
return "path";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void mvcMatcherPathVariables() throws Exception {
|
public void mvcMatcherPathVariables() throws Exception {
|
||||||
loadConfig(MvcMatcherPathVariablesConfig.class);
|
loadConfig(MvcMatcherPathVariablesConfig.class);
|
||||||
|
@ -441,6 +614,58 @@ public class AuthorizeRequestsTests {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void requestWhenMvcMatcherPathVariablesThenMatchesOnPathVariables() throws Exception {
|
||||||
|
loadConfig(MvcMatcherPathVariablesInLambdaConfig.class);
|
||||||
|
|
||||||
|
this.request.setRequestURI("/user/user");
|
||||||
|
|
||||||
|
this.springSecurityFilterChain.doFilter(this.request, this.response, this.chain);
|
||||||
|
|
||||||
|
assertThat(this.response.getStatus()).isEqualTo(HttpServletResponse.SC_OK);
|
||||||
|
|
||||||
|
this.setup();
|
||||||
|
this.request.setRequestURI("/user/deny");
|
||||||
|
|
||||||
|
this.springSecurityFilterChain.doFilter(this.request, this.response, this.chain);
|
||||||
|
|
||||||
|
assertThat(this.response.getStatus())
|
||||||
|
.isEqualTo(HttpServletResponse.SC_UNAUTHORIZED);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EnableWebSecurity
|
||||||
|
@Configuration
|
||||||
|
@EnableWebMvc
|
||||||
|
static class MvcMatcherPathVariablesInLambdaConfig extends WebSecurityConfigurerAdapter {
|
||||||
|
@Override
|
||||||
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
|
// @formatter:off
|
||||||
|
http
|
||||||
|
.httpBasic(withDefaults())
|
||||||
|
.authorizeRequests(authorizeRequests ->
|
||||||
|
authorizeRequests
|
||||||
|
.mvcMatchers("/user/{userName}").access("#userName == 'user'")
|
||||||
|
);
|
||||||
|
// @formatter:on
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
|
||||||
|
// @formatter:off
|
||||||
|
auth
|
||||||
|
.inMemoryAuthentication();
|
||||||
|
// @formatter:on
|
||||||
|
}
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
static class PathController {
|
||||||
|
@RequestMapping("/path")
|
||||||
|
public String path() {
|
||||||
|
return "path";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@EnableWebSecurity
|
@EnableWebSecurity
|
||||||
@Configuration
|
@Configuration
|
||||||
@EnableWebMvc
|
@EnableWebMvc
|
||||||
|
|
|
@ -162,9 +162,10 @@ public class CorsConfigurerTests {
|
||||||
protected void configure(HttpSecurity http) throws Exception {
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
http
|
http
|
||||||
.authorizeRequests()
|
.authorizeRequests(authorizeRequests ->
|
||||||
.anyRequest().authenticated()
|
authorizeRequests
|
||||||
.and()
|
.anyRequest().authenticated()
|
||||||
|
)
|
||||||
.cors(withDefaults());
|
.cors(withDefaults());
|
||||||
// @formatter:on
|
// @formatter:on
|
||||||
}
|
}
|
||||||
|
@ -261,9 +262,10 @@ public class CorsConfigurerTests {
|
||||||
protected void configure(HttpSecurity http) throws Exception {
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
http
|
http
|
||||||
.authorizeRequests()
|
.authorizeRequests(authorizeRequests ->
|
||||||
.anyRequest().authenticated()
|
authorizeRequests
|
||||||
.and()
|
.anyRequest().authenticated()
|
||||||
|
)
|
||||||
.cors(withDefaults());
|
.cors(withDefaults());
|
||||||
// @formatter:on
|
// @formatter:on
|
||||||
}
|
}
|
||||||
|
@ -359,9 +361,10 @@ public class CorsConfigurerTests {
|
||||||
protected void configure(HttpSecurity http) throws Exception {
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
http
|
http
|
||||||
.authorizeRequests()
|
.authorizeRequests(authorizeRequests ->
|
||||||
.anyRequest().authenticated()
|
authorizeRequests
|
||||||
.and()
|
.anyRequest().authenticated()
|
||||||
|
)
|
||||||
.cors(withDefaults());
|
.cors(withDefaults());
|
||||||
// @formatter:on
|
// @formatter:on
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,9 +109,10 @@ public class ExceptionHandlingConfigurerAccessDeniedHandlerTests {
|
||||||
protected void configure(HttpSecurity http) throws Exception {
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
http
|
http
|
||||||
.authorizeRequests()
|
.authorizeRequests(authorizeRequests ->
|
||||||
.anyRequest().denyAll()
|
authorizeRequests
|
||||||
.and()
|
.anyRequest().denyAll()
|
||||||
|
)
|
||||||
.exceptionHandling(exceptionHandling ->
|
.exceptionHandling(exceptionHandling ->
|
||||||
exceptionHandling
|
exceptionHandling
|
||||||
.defaultAccessDeniedHandlerFor(
|
.defaultAccessDeniedHandlerFor(
|
||||||
|
|
|
@ -254,9 +254,10 @@ public class FormLoginConfigurerTests {
|
||||||
protected void configure(HttpSecurity http) throws Exception {
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
http
|
http
|
||||||
.authorizeRequests()
|
.authorizeRequests(authorizeRequests ->
|
||||||
.anyRequest().hasRole("USER")
|
authorizeRequests
|
||||||
.and()
|
.anyRequest().hasRole("USER")
|
||||||
|
)
|
||||||
.formLogin(withDefaults());
|
.formLogin(withDefaults());
|
||||||
// @formatter:on
|
// @formatter:on
|
||||||
}
|
}
|
||||||
|
@ -387,9 +388,10 @@ public class FormLoginConfigurerTests {
|
||||||
protected void configure(HttpSecurity http) throws Exception {
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
http
|
http
|
||||||
.authorizeRequests()
|
.authorizeRequests(authorizeRequests ->
|
||||||
.anyRequest().hasRole("USER")
|
authorizeRequests
|
||||||
.and()
|
.anyRequest().hasRole("USER")
|
||||||
|
)
|
||||||
.formLogin(formLogin ->
|
.formLogin(formLogin ->
|
||||||
formLogin
|
formLogin
|
||||||
.loginPage("/authenticate")
|
.loginPage("/authenticate")
|
||||||
|
@ -458,9 +460,10 @@ public class FormLoginConfigurerTests {
|
||||||
protected void configure(HttpSecurity http) throws Exception {
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
http
|
http
|
||||||
.authorizeRequests()
|
.authorizeRequests(authorizeRequests ->
|
||||||
.anyRequest().authenticated()
|
authorizeRequests
|
||||||
.and()
|
.anyRequest().authenticated()
|
||||||
|
)
|
||||||
.formLogin(formLogin ->
|
.formLogin(formLogin ->
|
||||||
formLogin
|
formLogin
|
||||||
.loginProcessingUrl("/loginCheck")
|
.loginProcessingUrl("/loginCheck")
|
||||||
|
|
|
@ -107,9 +107,10 @@ public class HttpBasicConfigurerTests {
|
||||||
protected void configure(HttpSecurity http) throws Exception {
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
http
|
http
|
||||||
.authorizeRequests()
|
.authorizeRequests(authorizeRequests ->
|
||||||
.anyRequest().authenticated()
|
authorizeRequests
|
||||||
.and()
|
.anyRequest().authenticated()
|
||||||
|
)
|
||||||
.httpBasic(withDefaults());
|
.httpBasic(withDefaults());
|
||||||
// @formatter:on
|
// @formatter:on
|
||||||
}
|
}
|
||||||
|
|
|
@ -151,9 +151,10 @@ public class JeeConfigurerTests {
|
||||||
protected void configure(HttpSecurity http) throws Exception {
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
http
|
http
|
||||||
.authorizeRequests()
|
.authorizeRequests(authorizeRequests ->
|
||||||
.anyRequest().hasRole("USER")
|
authorizeRequests
|
||||||
.and()
|
.anyRequest().hasRole("USER")
|
||||||
|
)
|
||||||
.jee(jee ->
|
.jee(jee ->
|
||||||
jee
|
jee
|
||||||
.mappableRoles("USER")
|
.mappableRoles("USER")
|
||||||
|
@ -185,9 +186,10 @@ public class JeeConfigurerTests {
|
||||||
protected void configure(HttpSecurity http) throws Exception {
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
http
|
http
|
||||||
.authorizeRequests()
|
.authorizeRequests(authorizeRequests ->
|
||||||
.anyRequest().hasRole("USER")
|
authorizeRequests
|
||||||
.and()
|
.anyRequest().hasRole("USER")
|
||||||
|
)
|
||||||
.jee(jee ->
|
.jee(jee ->
|
||||||
jee
|
jee
|
||||||
.mappableAuthorities("ROLE_USER")
|
.mappableAuthorities("ROLE_USER")
|
||||||
|
@ -226,9 +228,10 @@ public class JeeConfigurerTests {
|
||||||
protected void configure(HttpSecurity http) throws Exception {
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
http
|
http
|
||||||
.authorizeRequests()
|
.authorizeRequests(authorizeRequests ->
|
||||||
.anyRequest().hasRole("USER")
|
authorizeRequests
|
||||||
.and()
|
.anyRequest().hasRole("USER")
|
||||||
|
)
|
||||||
.jee(jee ->
|
.jee(jee ->
|
||||||
jee
|
jee
|
||||||
.authenticatedUserDetailsService(authenticationUserDetailsService)
|
.authenticatedUserDetailsService(authenticationUserDetailsService)
|
||||||
|
|
|
@ -125,9 +125,10 @@ public class NamespaceHttpBasicTests {
|
||||||
protected void configure(HttpSecurity http) throws Exception {
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
http
|
http
|
||||||
.authorizeRequests()
|
.authorizeRequests(authorizeRequests ->
|
||||||
.anyRequest().hasRole("USER")
|
authorizeRequests
|
||||||
.and()
|
.anyRequest().hasRole("USER")
|
||||||
|
)
|
||||||
.httpBasic(withDefaults());
|
.httpBasic(withDefaults());
|
||||||
// @formatter:on
|
// @formatter:on
|
||||||
}
|
}
|
||||||
|
@ -174,9 +175,10 @@ public class NamespaceHttpBasicTests {
|
||||||
protected void configure(HttpSecurity http) throws Exception {
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
http
|
http
|
||||||
.authorizeRequests()
|
.authorizeRequests(authorizeRequests ->
|
||||||
.anyRequest().hasRole("USER")
|
authorizeRequests
|
||||||
.and()
|
.anyRequest().hasRole("USER")
|
||||||
|
)
|
||||||
.httpBasic(httpBasicConfig -> httpBasicConfig.realmName("Custom Realm"));
|
.httpBasic(httpBasicConfig -> httpBasicConfig.realmName("Custom Realm"));
|
||||||
// @formatter:on
|
// @formatter:on
|
||||||
}
|
}
|
||||||
|
@ -310,9 +312,10 @@ public class NamespaceHttpBasicTests {
|
||||||
protected void configure(HttpSecurity http) throws Exception {
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
http
|
http
|
||||||
.authorizeRequests()
|
.authorizeRequests(authorizeRequests ->
|
||||||
.anyRequest().hasRole("USER")
|
authorizeRequests
|
||||||
.and()
|
.anyRequest().hasRole("USER")
|
||||||
|
)
|
||||||
.httpBasic(httpBasicConfig ->
|
.httpBasic(httpBasicConfig ->
|
||||||
httpBasicConfig.authenticationEntryPoint(this.authenticationEntryPoint));
|
httpBasicConfig.authenticationEntryPoint(this.authenticationEntryPoint));
|
||||||
// @formatter:on
|
// @formatter:on
|
||||||
|
|
|
@ -98,9 +98,10 @@ public class NamespaceHttpServerAccessDeniedHandlerTests {
|
||||||
protected void configure(HttpSecurity http) throws Exception {
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
http
|
http
|
||||||
.authorizeRequests()
|
.authorizeRequests(authorizeRequests ->
|
||||||
.anyRequest().denyAll()
|
authorizeRequests
|
||||||
.and()
|
.anyRequest().denyAll()
|
||||||
|
)
|
||||||
.exceptionHandling(exceptionHandling ->
|
.exceptionHandling(exceptionHandling ->
|
||||||
exceptionHandling.accessDeniedPage("/AccessDeniedPageConfig")
|
exceptionHandling.accessDeniedPage("/AccessDeniedPageConfig")
|
||||||
);
|
);
|
||||||
|
@ -152,9 +153,10 @@ public class NamespaceHttpServerAccessDeniedHandlerTests {
|
||||||
protected void configure(HttpSecurity http) throws Exception {
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
http
|
http
|
||||||
.authorizeRequests()
|
.authorizeRequests(authorizeRequests ->
|
||||||
.anyRequest().denyAll()
|
authorizeRequests
|
||||||
.and()
|
.anyRequest().denyAll()
|
||||||
|
)
|
||||||
.exceptionHandling(exceptionHandling ->
|
.exceptionHandling(exceptionHandling ->
|
||||||
exceptionHandling.accessDeniedHandler(accessDeniedHandler())
|
exceptionHandling.accessDeniedHandler(accessDeniedHandler())
|
||||||
);
|
);
|
||||||
|
|
|
@ -320,9 +320,10 @@ public class RememberMeConfigurerTests {
|
||||||
protected void configure(HttpSecurity http) throws Exception {
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
http
|
http
|
||||||
.authorizeRequests()
|
.authorizeRequests(authorizeRequests ->
|
||||||
.anyRequest().hasRole("USER")
|
authorizeRequests
|
||||||
.and()
|
.anyRequest().hasRole("USER")
|
||||||
|
)
|
||||||
.formLogin(withDefaults())
|
.formLogin(withDefaults())
|
||||||
.rememberMe(withDefaults());
|
.rememberMe(withDefaults());
|
||||||
// @formatter:on
|
// @formatter:on
|
||||||
|
@ -394,9 +395,10 @@ public class RememberMeConfigurerTests {
|
||||||
protected void configure(HttpSecurity http) throws Exception {
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
http
|
http
|
||||||
.authorizeRequests()
|
.authorizeRequests(authorizeRequests ->
|
||||||
.anyRequest().hasRole("USER")
|
authorizeRequests
|
||||||
.and()
|
.anyRequest().hasRole("USER")
|
||||||
|
)
|
||||||
.formLogin(withDefaults())
|
.formLogin(withDefaults())
|
||||||
.rememberMe(rememberMe ->
|
.rememberMe(rememberMe ->
|
||||||
rememberMe
|
rememberMe
|
||||||
|
|
|
@ -291,9 +291,10 @@ public class RequestCacheConfigurerTests {
|
||||||
protected void configure(HttpSecurity http) throws Exception {
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
http
|
http
|
||||||
.authorizeRequests()
|
.authorizeRequests(authorizeRequests ->
|
||||||
.anyRequest().authenticated()
|
authorizeRequests
|
||||||
.and()
|
.anyRequest().authenticated()
|
||||||
|
)
|
||||||
.formLogin(withDefaults())
|
.formLogin(withDefaults())
|
||||||
.requestCache(RequestCacheConfigurer::disable);
|
.requestCache(RequestCacheConfigurer::disable);
|
||||||
// @formatter:on
|
// @formatter:on
|
||||||
|
@ -318,9 +319,10 @@ public class RequestCacheConfigurerTests {
|
||||||
protected void configure(HttpSecurity http) throws Exception {
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
http
|
http
|
||||||
.authorizeRequests()
|
.authorizeRequests(authorizeRequests ->
|
||||||
.anyRequest().authenticated()
|
authorizeRequests
|
||||||
.and()
|
.anyRequest().authenticated()
|
||||||
|
)
|
||||||
.formLogin(withDefaults())
|
.formLogin(withDefaults())
|
||||||
.requestCache(withDefaults());
|
.requestCache(withDefaults());
|
||||||
// @formatter:on
|
// @formatter:on
|
||||||
|
@ -345,9 +347,10 @@ public class RequestCacheConfigurerTests {
|
||||||
protected void configure(HttpSecurity http) throws Exception {
|
protected void configure(HttpSecurity http) throws Exception {
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
http
|
http
|
||||||
.authorizeRequests()
|
.authorizeRequests(authorizeRequests ->
|
||||||
.anyRequest().authenticated()
|
authorizeRequests
|
||||||
.and()
|
.anyRequest().authenticated()
|
||||||
|
)
|
||||||
.formLogin(withDefaults())
|
.formLogin(withDefaults())
|
||||||
.requestCache(requestCache ->
|
.requestCache(requestCache ->
|
||||||
requestCache
|
requestCache
|
||||||
|
|
Loading…
Reference in New Issue