2015-10-25 7 views
4

Я хочу включить использование «ROLE_ANONYMOUS», чтобы разрешить анонимный доступ к некоторым URL-адресам в моем приложении. И я использовал приведенную ниже конфигурацию.Конфигурация на основе Java для включения анонимного доступа весны безопасности

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http 
     .requestCache() 
      .requestCache(new NullRequestCache()).and() 
     .anonymous().authorities("ROLE_ANONYMOUS").and() 
     .exceptionHandling().and() 
     .servletApi().and() 
     .headers().cacheControl().and() 
     .authorizeRequests() 
      .antMatchers("/").permitAll() 
      .antMatchers("/profile/image").permitAll() 
      .antMatchers("/favicon.ico").permitAll() 
      .antMatchers("/resources/**").permitAll() 

      //.antMatchers(HttpMethod.GET, "/login/**").permitAll() 
      //.antMatchers(HttpMethod.GET, "/location/**").permitAll() 

      .anyRequest().authenticated()/*.and() 
      .apply(new SpringSocialConfigurer())*/; 

     // custom Token based authentication based on the header previously given to the client 
     //.addFilterBefore(new StatelessAuthenticationFilter(tokenAuthenticationService), UsernamePasswordAuthenticationFilter.class); 
} 

Мой контроллер выглядит следующим образом:

@RestController 
@RequestMapping(value="/login", produces="application/json") 
public class LoginController { 


    @Secured(value={"ROLE_ANONYMOUS"}) 
    @RequestMapping(method=RequestMethod.GET) 
    public String get(){ 
     return "hello"; 
    } 
} 

Но когда я пытаюсь ударить "/ войти в" Я получаю 403 ошибку доступа. Пожалуйста, помогите мне, как я могу включить анонимный анонимный доступ.

ответ

1

Это должно решить вашу проблему.

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http 
     ... 
     .formLogin().loginPage("/login").permitAll() 
     ... 

Но если вы предпочитаете не использовать permitAll но придерживаться анонимного roled пользователя (это будет тот же эффект, как на ситуацию, но все же, если это WHT вы предпочитаете), то попробуйте это в контроллере.

@Secured("ROLE_ANONYMOUS") 
@RequestMapping(method=RequestMethod.GET) 
public String get(){ 
    ... 
+0

Спасибо @Faraj Farook. Но, как я говорю, нужно использовать только ROLE_ANONYMOUS. Потому что у меня более 300 различных действий, которые будут отмечены как ANONYMOUS. –

2

Как писал Faraj Farook, вы должны разрешить доступ к URL-адресу вашей страницы входа. Вы прокомментировал соответствующую строку из:

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http 
     .anonymous() 
      .authorities("ROLE_ANONYMOUS") 
      .and() 
     .headers() 
      .cacheControl() 
      .and() 
     .authorizeRequests() 
      .antMatchers("/").permitAll() 
      .antMatchers("/profile/image").permitAll() 
      .antMatchers("/favicon.ico").permitAll() 
      .antMatchers("/resources/**").permitAll() 

      .antMatchers(HttpMethod.GET, "/login/**").permitAll() 

      .anyRequest().authenticated() 
} 

Но если вы предпочитаете не использовать permitAll() вы могли бы использовать hasAuthority("ROLE_ANONYMOUS"). В этом случае вам не нужно комментировать ваш метод с помощью @Secured(value={"ROLE_ANONYMOUS"}).