0

我正在尝试在扩展 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() 。

我试图理解为什么这个典型的例子不起作用。这看起来很简单,我已经看到整个网络上的代码都以同样的方式使用它。

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

4

2 回答 2

2

您的代码在 Eclipse 中使用 Maven 和 Gradle 编译得很好。我猜你正在使用 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

于 2014-02-12T03:05:03.543 回答
0

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

protected void configure(HttpSecurity http) throws Exception {
    http.httpBasic();
    http
        .authorizeRequests()
            .antMatchers("/**").hasRole("USER");
}
于 2014-02-12T02:10:52.510 回答