Spring - 安全 - authorizeRequests 链有问题

Spring - Security - Trouble with authorizeRequests chain

我不明白,如何正确制作 authorizeRequests 链的链。

如果我写

 http
                .addFilterBefore(characterEncodingFilter(), CsrfFilter.class)
                .addFilterAfter(cacheControllerFilter(), CsrfFilter.class)
                .authorizeRequests()
                .antMatchers("/**").permitAll()
                .and()
                .authorizeRequests()
                .antMatchers("/admin/**").hasRole("ADMIN").anyRequest().authenticated()
                .and()
                .formLogin()
                .loginPage("/admin/login.html")
                .defaultSuccessUrl("/admin/")
                .permitAll()
                .and()
                .logout()
                .permitAll();

在这种情况下,所有都是 permitAll,包括 /admin/** 。

如果我有

http
                .addFilterBefore(characterEncodingFilter(), CsrfFilter.class)
                .addFilterAfter(cacheControllerFilter(), CsrfFilter.class)
                .authorizeRequests()
                .antMatchers("/**").permitAll()
                .and()
                .authorizeRequests()
                .antMatchers("/admin/**").hasRole("ADMIN").anyRequest().authenticated()
                .and()
                .formLogin()
                .loginPage("/admin/login.html")
                .defaultSuccessUrl("/admin/")
                .permitAll()
                .and()
                .logout()
                .permitAll();

在这种情况下,包括 /admin/** 在内的所有内容都需要用户身份验证。

找到解决方案 http://docs.spring.io/spring-security/site/docs/3.2.5.RELEASE/reference/htmlsingle/#authorize-requests

在我的案例中,解决方案是

http
                .addFilterBefore(characterEncodingFilter(), CsrfFilter.class)
                .addFilterAfter(cacheControllerFilter(), CsrfFilter.class)
                .authorizeRequests()
                .antMatchers("/admin/**").hasRole("ADMIN")
                .anyRequest().permitAll()
                .and()
                .formLogin()
                .loginPage("/admin/login.html")
                .defaultSuccessUrl("/admin/")
                .permitAll()
                .and()
                .logout()
                .permitAll();