为什么.and()。httpBasic();无法在WebSecurityConfigurerAdapter中工作

时间:2014-02-12 01:57:16

标签: java spring spring-security spring-java-config

我正在尝试在扩展WebSecurityConfigurerAdapter的类中使用Spring的Security的Java配置。我使用的是版本3.2.0.RELEASE。

在HttpSecurity.java类中有一个例子如下。

protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
            .antMatchers("/**").hasRole("USER").and()
            .httpBasic();
}

当我尝试在我的项目中使用这个确切的示例时,.and()方法不会返回带有.httpBasic()方法的对象。传递给configure()方法的HttpSecurity http对象上有.httpBasic()。

我试图理解为什么这个规范的例子不起作用。这看起来非常简单,我已经在网上看到了以相同方式使用它的代码。

我的版本有错吗?我看到有些人使用发布的Candiate,但我认为3.2.0.RELEASE版本是最新版本(如此处列出的http://projects.spring.io/spring-security/)。

2 个答案:

答案 0 :(得分:2)

使用Maven和Gradle,你的代码在Eclipse中编译就好了。我猜你使用的是具有bug for handling the generic return types的IntelliJ。在此期间,您可以将authorizeRequests()移动到底部,IntelliJ将编译其余部分。

顺便说一下,我鼓励你使用以下内容:

protected void configure(HttpSecurity http) throws Exception {
    http
        .httpBasic()
            .and()
        .authorizeRequests()
            .anyRequest().hasRole("USER");
}

三个变化:

  • 将authorizeRequests()移到底部以解决IntelliJ错误
  • 您可以使用anyRequest()匹配器而不是antMatchers(“/ **”)这是相同的事情,但会增加可读性并为您提供编译时间检查
  • 更改格式以匹配Spring Security Java Config Preview: Readability

PS:另外值得注意的是http://youtrack.jetbrains.com/issue/IDEA-118527

答案 1 :(得分:0)

我不知道为什么这个例子是错的,但这很有效。

protected void configure(HttpSecurity http) throws Exception {
    http.httpBasic();
    http
        .authorizeRequests()
            .antMatchers("/**").hasRole("USER");
}