URL和用户的Spring Security配置

时间:2015-03-31 18:43:43

标签: java spring rest spring-security spring-boot

我想在我的REST服务器中提出两种请求: 那些拥有“/ freerest /”路径的人可以请求,其他人则需要身份验证。

这是我的代码:

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

@Configuration
class WebSecurityConfiguration extends GlobalAuthenticationConfigurerAdapter {

  @Autowired
  UserAccountRepository userAccountRepository;

  @Override
  public void init(AuthenticationManagerBuilder auth) throws Exception {
    auth.userDetailsService(userDetailsService());
  }

  @Bean
  UserDetailsService userDetailsService() {
    return new UserDetailsService() {

      @Override
      public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
        UserAccount account = userAccountRepository.findByEmail(email);
        if(account != null) {
            return new User(account.getEmail(), account.getPassword(), true, true, true, true,
                AuthorityUtils.createAuthorityList("USER"));
        } else {
            throw new UsernameNotFoundException("could not find the user '"
                  + email + "'");
        }
      }

    };
  }
}

@EnableWebSecurity
@Configuration
class WebSecurityConfig extends WebSecurityConfigurerAdapter {

  @Override
  protected void configure(HttpSecurity http) throws Exception {    
    http.authorizeRequests().antMatchers("/freerest/**").permitAll().and().authorizeRequests().anyRequest().hasAnyAuthority("USER");
  }
}

在我的脑海中,在hasAnyAuthority(“USER”)之后,应该有一个.permitAll()。但不要。

所以,freerest路径工作正常,但如果我尝试一些用户,我的数据库,或默认的Spring的用户,我得到403。

有什么问题?

1 个答案:

答案 0 :(得分:1)

试试这个。您在antMatch和任何请求之间添加了and()。我认为这就是问题。

并添加正确的身份验证领域,然后添加and(),如下所示。 这里我使用HTTP基本身份验证来实现宁静的

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

        ......
        ......
        ......

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

        ......
        ......
        ......

    }