我知道stackoverflow上有一些问题,但没有任何帮助......
http
.addFilterBefore(RestConfiguration.getCorsFilter(), ChannelProcessingFilter.class)
.authorizeRequests() //Authorize Request Configuration
.antMatchers("/api/**").hasRole("API")
.antMatchers("/api/confirm/**").permitAll()
.antMatchers("/api/version").permitAll()
.anyRequest().authenticated()
.and() //HTTP basic Authentication only for API
.antMatcher("/api/**").httpBasic()
.and() // angularjs requires csrf
.addFilterAfter(new CsrfHeaderFilter(), CsrfFilter.class)
.csrf().disable();
我有一些带有子路径的api路径。但我希望在没有基本身份验证(confirm/**
和version
)的情况下访问其中两个。
我该怎么做?我总是得到登录对话框。
答案 0 :(得分:0)
您应该在antMatchers("/api/**").hasRole("API")
和/api/confirm/**
之后使用/api/version
规则。目前的订购不太正确:
.antMatchers("/api/confirm/**").permitAll()
.antMatchers("/api/version").permitAll()
.antMatchers("/api/**").hasRole("API")
总而言之,如果您只想保护/api/*
并允许公开访问/api/confirm/**
,/api/version
以及所有其他没有api
前缀的路径,那么您应该拥有HttpSecurity
配置如下:
http
// Same as before
.httpBasic()
.and()
.authorizeRequests()
.antMatchers("/api/confirm/**").permitAll()
.antMatchers("/api/version").permitAll()
.antMatchers("/api/**").hasRole("API")
.anyRequest().permitAll();
// Same as before