Spring Boot 安全配置不起作用
Posted
技术标签:
【中文标题】Spring Boot 安全配置不起作用【英文标题】:Spring Boot Security Configuration is not working 【发布时间】:2019-08-25 22:06:23 【问题描述】:我有两种类型的网址,一种是安全的,一种是不安全的,例如注册和登录
我希望“注册”和“登录”绕过安全和过滤器,而所有其他 url 必须通过过滤器和安全。
以下是我的安全配置代码,但它不起作用。
@EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableWebSecurity
@Configuration
public class AppSecurity extends WebSecurityConfigurerAdapter
@Autowired
private CustomUserDetailsService userDetailsService;
@Autowired
TempTokenGenerator tempTokenGenerator;
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception
return super.authenticationManagerBean();
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception
auth.userDetailsService(userDetailsService)
.passwordEncoder(getPasswordEncoder());
public void configure(WebSecurity web) throws Exception
web.ignoring().antMatchers("notsecured/signin");
@Override
protected void configure(HttpSecurity http) throws Exception
http.cors().and().csrf().disable().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
http.authorizeRequests()
.antMatchers("/", "**secured/**").authenticated()
.and().logout().permitAll()
.and()
.apply(new TempConfigurer(tempTokenGenerator));
@Bean
CorsConfigurationSource corsConfigurationSource()
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", new CorsConfiguration().applyPermitDefaultValues());
return source;
我错过了什么?我应该怎么做才能在身份验证和过滤器中包含“安全”网址,同时从身份验证和过滤器中排除“不安全”。
web.ignoring().antMatchers("notsecured/signin");
如果我放的话似乎不起作用
.anyRequest().authenticated()
与
http.authorizeRequests() to make secured urls work.
如果我放了
.antMatchers("/","**/secured/**").authenticated()
与
.anyRequest().permitAll()
它也不起作用。
【问题讨论】:
http.authorizeRequests().antMatchers("/unsecured").permitAll() 你期待这个吗? @Sankar 是的,我想要这个用于 /unsecured 但同时我想要 http.authorizeRequests().antMatchers("/secured").authenticated.and() .apply(new TempConfigurer(tempTokenGenerator ));为/安全 http.authorizeRequests().antMatchers("/unsecured").permitAll() .antMatchers("/secured/**").hasRole("USER_ROLE") 可以这样使用。 【参考方案1】:使用configure(HttpSecurity http)
方法保护您的请求端点
http.csrf().disable()
.cors().and()
.authorizeRequests()
.antMatchers("/notsecured/**").permitAll()
.antMatchers("/secured/**").fullyAuthenticated()
.and().sessionManagement...
.and().formLogin()
...
使用configure(WebSecurity web)
方法忽略静态资源,如图片、css、...
【讨论】:
我已经在使用 configure(HttpSecurity http) 并且我希望以下过滤器仅应用于安全 url .and() .apply(new TempConfigurer(tempTokenGenerator)); 另外,提供的解决方案也不起作用,所有网址都可以正常工作,无需身份验证。 重点是你应该添加多个匹配器,允许公共访问和安全访问.antMatchers("matching public access").permitAll() .antMatchers("matching secured access").fullyAuthenticated()
,是的,你可以使用.and() .apply(new TempConfigurer(tempTokenGenerator));
感谢您的回复,但我已经申请了匹配器,您可能会看到我的 OP。以下是我如何实现匹配器 .antMatchers("/secure/path/**").permitAll() .antMatchers("/unsecured/path/**").fullyAuthenticated() .and().logout()。 permitAll() 但它不起作用。以上是关于Spring Boot 安全配置不起作用的主要内容,如果未能解决你的问题,请参考以下文章
spring boot starter 安全发布方法不起作用
使用 mongodb PostAuthorize 和 PreAuthorize 的 Spring Boot 安全性不起作用
Spring Boot ReactiveCircuitBreaker 配置不起作用