2017-08-03 11 views
-2

私はいくつかのコントローラを持っていて、そのうちの1つだけを保護したいと考えていますが、 は時間を費やしています。Springでマークされたコントローラのみを保護することは可能ですか?@Secured注釈

設定からどうすればいいですか?

コントローラ:

@RestController 
@RequestMapping("/somepath") 
public class UnsecController { 
// code here 
} 

@Secured("ROLE_CUSTOM") 
@RestController 
@RequestMapping("/somepath2") 
public class SecController { 
// code here 
} 

設定:

@Configuration 
@EnableWebSecurity 
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true) 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Override 
    public void configure(WebSecurity web) throws Exception { 
     web.ignoring().antMatchers("/js/**", "/css/**", "/fonts/**", "/static", "/swagger-ui.html"); 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 

     http 
      .csrf().disable() 
      .antMatcher("/**") 
      .addFilterBefore(authFilter(), BasicAuthenticationFilter.class) 
      .authorizeRequests() 
      .antMatchers("/health").permitAll() 
      .anyRequest().authenticated() 
      .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); 
    } 

    @Bean 
    public MacaroonsAuthFilter authFilter() { 
     return new MacaroonsAuthFilter(); 
    } 
} 

編集:

私は、 を確保したいが、それらを書きたいいけない100から50台のコントローラを持っています手動設定

+0

セキュリティで保護された(@Secured'で)コントローラが1つしかない場合は、すべてのパスを許可できます( 'anyRequest()。permitAll()')。 – dur

答えて

0

コントローラはWebSecurityConfigurerAdapterを設定することで保護されます。 1つのコントローラメソッドだけを保護したい場合は、HttpSecurityをこのパスと一致するように設定する必要があります。他のすべての方法はセキュリティから除外されます。何かが次のように:

@Override 
protected void configure(HttpSecurity http) throws Exception { 
http 
.authorizeRequests() 
.antMatchers("/somepath").hasRole("CUSTOM") 
.anyRequest().permitAll(); 
} 

@Securedアノテーションは、通常、サービスの方法にしていないコントローラで使用されています。

関連する問題