Spring Security为不安全的URL

时间:2016-06-15 08:11:30

标签: spring spring-security

从Spring Boot 1.3.3应用程序使用Spring Security 4.0.3。

该应用程序有两种类型的HTTP内容:“API”一个REST API和“UI”一个基于Web的二手界面(Thymeleaf + Spring Web MVC)。 / p>

应用程序REST API的大多数端点都是使用Basic保护的,但有些端点不是,并且始终可用。

简化配置如下:

        // In one method, the security config for the "API"
        httpSecurity
                .antMatcher("/api/**")
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER)
                .and()
                .authorizeRequests()
                .antMatchers("/api/ping").permitAll()
                .antMatchers("/api/**").hasRole("USER")
                .and()
                .httpBasic();

        // In another method, the security config for the "UI"
        httpSecurity
                .authorizeRequests()
                .antMatchers("/ui/", "/ui/index.html", "/ui/css/*", "/ui/js/*", "/ui/img/*").permitAll()
                .antMatchers("/ui/user/**").hasRole("USER")
                .antMatchers("/ui/**").denyAll()
                .and()
                .formLogin().loginPage("/ui/login.html").permitAll().failureUrl("/ui/login.html").defaultSuccessUrl("/ui/user/main.html")
                .and()
                .logout().logoutUrl("/ui/logout").permitAll().logoutSuccessUrl("/ui/login.html")
                .and()
                .httpBasic();

对安全端点的访问按预期工作。

但是当用户提供无效的基本身份验证时,对“... / api / ping”等公共端点的访问会失败。当然,如果没有提供有效的基本身份验证,这些端点就可以正常工作。

来自Spring Security的这个401令人惊讶。我们如何实现永远不会为选定端点返回任何401或403的Spring Security配置?

感谢您的时间。

更新1 :添加了有关“用户界面”存在和安全配置的信息

1 个答案:

答案 0 :(得分:0)

订单很重要。最具体的规则(路径)首先:

httpSecurity
    .antMatchers("/api/ping").permitAll()
    // and then the rest

这是因为如果有antMatcher("/api/**")之类的匹配,Spring Security将不会评估以后的规则。