我使用一个向移动应用程序公开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()
它没有帮助。你能帮助恢复原来的行为吗?
你有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