当前位置: 首页 > 知识库问答 >
问题:

升级到Spring Boot 2.0.2后,Spring Security.permitAll()不再有效

夹谷和韵
2023-03-14

我使用一个向移动应用程序公开REST API的Web应用程序。我将Spring Boot版本从1.5.3.RELEASE升级到2.0.2.RELEASE,在修复了一些重大更改后,我面临着一个无法解决的问题。

我遵循了SpringBoot2.0迁移指南和SpringBootSecurity2.0,还研究了Springboot2.0M4中的安全性变化。

问题是应用使用 JWT 身份验证,并且有一个终结点(/auth/login)接受用户凭据并生成一个长期存在的 JWT 作为回报。

有一个过滤器检查客户端发送的JWT令牌,并确定客户端是否可以访问所请求的资源。

定义安全配置如下所示:

@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled=true)
public class SecurityConfiguration {

@Configuration
@Order(1)
public class AuthenticationConfiguration extends WebSecurityConfigurerAdapter {

    // Some dependencies omitted

    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity
                // we don't need CSRF because JWT token is invulnerable
                .csrf().disable()

                .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()

                // don't create session
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()

                .authorizeRequests()
                .antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
                .antMatchers(HttpMethod.GET, "/version/**").permitAll()
                // Some more antMatchers() lines omitted
                .antMatchers("/auth/**").permitAll()
                .anyRequest().authenticated();

        // Custom JWT based security filter
        httpSecurity
                .addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class);

        // disable page caching
        httpSecurity.headers().cacheControl();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Bean
    public JwtAuthenticationTokenFilter authenticationTokenFilterBean() throws Exception {
        return new JwtAuthenticationTokenFilter(jwtTokenUtil);
    }
}

@Configuration
@Order(2)
public class ClientVersionSupportConfiguration extends WebMvcConfigurerAdapter {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry
                .addInterceptor(versionCheckingFilter())
                .addPathPatterns("/**")
                .excludePathPatterns("/error"); // Some more endpoints omitted
    }

    @Bean
    public VersionCheckingInterceptor versionCheckingFilter() {
        return new VersionCheckingInterceptor();
    }
}

}

请注意<代码>。antMatchers("/auth/** ")。permitAll()行。< code>/authendpoint应该可以在没有JWT的情况下访问,因为当用户尚未登录时,JWT尚未生成。

在升级Spring Boot之前,它工作正常,现在它不起作用。登录尝试被检查 JWT 的筛选器拒绝。看起来 .permitAll() 没有使请求通过。/version/** 也不起作用。从浏览器中点击它会得到一个错误页面。

我还尝试从配置中删除行,直到这仍然存在:

httpSecurity
        .authorizeRequests()
                .antMatchers("/auth/**").permitAll()

它没有帮助。你能帮助恢复原来的行为吗?

共有1个答案

石正信
2023-03-14

你有api的基本路径吗,比如< code>/api?

server.contextPath默认Spring属性名称已更改为server.servlet.context-path

因此,如果您为您的api使用默认的基本路径,您将找不到您期望它们的endpoint。除非您更新属性;)

 类似资料:
  • 我最近更新了我的自制Python 3.8安装。2至3.8。3.做完后,我跑了 以检查是否有任何更新。它更新了我从20.0安装的。2至20.1。1,并且自从我运行该命令以来,在我尝试使用它的任何时候都会抛出一个错误。以下是错误: 升级过程中似乎出现了一些问题,未能更改代码中的版本检查。我看到了类似的问题,但公认的答案对我来说并不适用。如何使再次可用?

  • 我有一个相当大的Android应用程序项目,它引用了几个库项目。在我将eclipse ADT插件升级到最新版本(v22)之前,一切都很好。当然我也升级了SDK。我在eclipse中没有看到任何编译错误,但是当我在电话上运行项目时,我得到一个NoClassDefoundError。 arca库包含在一个引用库项目中(在libs文件夹中),我可以在package explorer中的“Android

  • 我们最近升级了我们的Kotlin Spring Boot项目,使之成为Spring Boot2.3.2,从那以后,gradle似乎再也无法进行任何测试了。 我们使用的是 gradle 包装器 5.6.2 并升级到 6.3,尽管文档指出 5.6.x 也应该可以工作。Gradle 升级没有帮助,gradle 仍然无法接受任何测试,当我降级到 2.2.3 时它工作正常。我们使用Kotest,Junit5

  • 我刚刚更新了一些flutter软件包。但是,在执行flutter运行时我一直收到此错误。如果我将apk直接安装到设备上,它可以正常工作(这意味着我可以执行flutter build apk),但是,在调试模式下看不到运气。 我最初发布这个帖子时有一个multidex问题,我想我已经通过在build.gradle中将gradle地址更新为4.3.zip解决了这个问题。 任何帮助都将不胜感激。 这是我

  • 我用Play2.0创建了一个应用程序。我实现了scribe-java库来使用一些OAuth服务。直到今天,一切都很好,但当我升级jdk并重新启动服务器时,我不能使用scribe-java库。它似乎在sun.security包中使用了和类,但找不到。 “java-version”返回: 播放2.0 StackTrace:

  • 这是另一种拖延升级构建工具的情况,因为每次升级时,我都会发现有太多的更改需要处理。 我使用vue cli 4.5创建了一个新项目,并加载了它,就像新项目一样。然后我复制了新项目在依赖项、配置文件等方面的外观。我删除了node_模块,甚至删除了包锁,运行了,然后运行,并得到了我在网络上看到的奇怪的缓存错误,但对我来说没有任何效果。 未找到此依赖项: @/node_modules/cache-load