2 回答
TA贡献1862条经验 获得超7个赞
您在安全配置中发布的代码@Order(1)
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests().antMatchers("/v1/crash/consumeCrashBoxxEvent").hasRole("ADMIN").and()
.httpBasic().authenticationEntryPoint(getBasicAuthEntryPoint()).and().sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
如果这正是您正在使用的代码,则@Order(2)
不会咨询您的配置。这将是死配置。
让我解释!http.authorizeRequests()
==http.antMatcher("/**").authorizeRequests()
在你的第一个配置中,你使用了通配符,你的配置结果是
/v1/crash/consumeCrashBoxxEvent
如果用户经过身份验证并且具有 ADMIN 角色,则可以访问Rest of URL's
如果用户通过身份验证则可以访问
让我猜猜发生了什么!
1. 您正在点击 URL /v1/crash/consumeCrashBoxxEvent
,否则any URL
系统将提示您进行基本身份验证。
2. 身份验证成功后,您可以访问任何 URL,因为您是经过身份验证的用户。
但是,如果我通过基本身份验证进行了身份验证,则我可以访问其他 URL(受 JWT 身份验证保护),甚至无需在请求中包含令牌。
因为正如我所说,您可以访问任何 URL,因为您是经过身份验证的用户
当我在没有使用基本身份验证的情况下访问受 JWT 保护的 URL 时,我必须在标头中发送令牌,并且它会按预期工作
检查没有令牌您是否可以访问。因为一旦您通过基本身份验证登录,就不会从服务器端注销(即使您重新启动服务器)。只有关闭浏览器才能实现注销。因此,您可以通过关闭并再次启动浏览器来测试它。并通过不发送 JWT 令牌来测试它。
还要确保您的请求到达 JwtAuthenticationTokenFilter,放入调试日志进行验证。
正如您的问题中有很多抽象,除非您发布完整的代码,否则很难准确预测正在发生的情况。
如果我的预测与实际有所偏差,请在评论中告诉我。
TA贡献1805条经验 获得超10个赞
这是通过使用 Praveen Kumar Lalasangi 的上述答案中提供的信息解决的。
对方法的一个小改变configure就达到了目的。更新是:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.antMatcher(crashBoxxConsumeEndpoint).authorizeRequests().anyRequest()
.hasRole("ADMIN")
.and().httpBasic().authenticationEntryPoint(getBasicAuthEntryPoint())
.and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
添加回答
举报