2016-07-15 50 views
4

我有一個Spring Boot Web應用程序暴露幾個休息終點。我想知道我們如何才能爲選定的休息終端啓用基本身份驗證。假設我只想要/employee/{id}請求進行驗證,並忽略所有其他休息端點。我正在使用下面的代碼。我的問題是antMatcher只會驗證指定的請求嗎?目前,其對所有休息端點的啓用身份驗證:僅驗證選定的休息終點:彈簧啓動

@Configuration 
@EnableWebSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 
    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     // How does it work will it only authenticate employee & 
     // ignore any other request?? Its authenticating all the requests currently. 
     http 
      .authorizeRequests() 
       .antMatchers("/employee/*").authenticated() 
      .and() 
      .httpBasic() 
      .and() 
      .csrf() 
       .disable();  
    } 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
     auth 
      .inMemoryAuthentication() 
       .withUser("admin").password("admin").roles("USER"); 
    } 
} 
+0

你的配置似乎沒什麼問題。確定這個配置正在被應用?你是否在控制檯上看到一個隨機密碼,用於默認的'user'?請發佈您的項目結構。 –

回答

4

默認情況下,當Spring Security位於類路徑中時,Spring Boot將確保所有端點的安全。

您需要爲所有其他端點明確添加一個排除項,以允許不經過身份驗證。

例子:

@Configuration 
@EnableWebSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
      .authorizeRequests() 
       .antMatchers("/employee/*").authenticated() 
       .anyRequest().permitAll() 
      .and() 
      .httpBasic() 
      .and() 
      .csrf().disable(); 
    } 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
     auth 
      .inMemoryAuthentication() 
       .withUser("admin").password("admin").roles("USER"); 
    } 

}