AccessDeniedException 上的 HTTP 401 [重复]
Posted
技术标签:
【中文标题】AccessDeniedException 上的 HTTP 401 [重复]【英文标题】:HTTP 401 on AccessDeniedException [duplicate] 【发布时间】:2022-01-18 17:57:01 【问题描述】:我有以下安全配置和 JwtFilter:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
class SecurityConfig(
val tokenService: TokenService,
) : WebSecurityConfigurerAdapter(), WebMvcConfigurer
override fun configure(http: HttpSecurity)
http
.csrf().disable()
.authorizeRequests()
.anyRequest().authenticated()
.and()
.addFilterAt(
JwtFilter(authenticationManager(), tokenService),
UsernamePasswordAuthenticationFilter::class.java
)
class JwtFilter(
authManager: AuthenticationManager,
private val tokenService: TokenService,
) : BasicAuthenticationFilter(authManager)
@Throws(IOException::class, ServletException::class)
override fun doFilterInternal(
req: HttpServletRequest,
res: HttpServletResponse,
chain: FilterChain
)
val header = req.getHeader("Authorization")
if (header == null || !header.startsWith("Bearer"))
chain.doFilter(req, res)
return
tokenService.extractUser(header)?.also
SecurityContextHolder.getContext().authentication = it
chain.doFilter(req, res)
TokenService#extractUser
抛出 AccessDeniedException
以防 JWT 解析错误。我找不到将其映射到 HTTP 401 的方法。可以做到吗?
我尝试过使用HttpSecurity#exceptionHandling()
以及在@ControllerAdvice
中添加@ExceptionHandler
,但我总是收到HTTP 403。
【问题讨论】:
【参考方案1】:感谢this 线程,我设法通过将以下两行添加到我的WebSecurityConfigurerAdapter#configure
来解决它:
.exceptionHandling()
.authenticationEntryPoint(HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED))
【讨论】:
以上是关于AccessDeniedException 上的 HTTP 401 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
gsutil cors set 命令返回 403 AccessDeniedException
AccessDeniedException:用户无权对资源执行 dynamodb BatchWriteItem:表
如果使用 RoleHierarchyImpl,则 AccessDeniedException
将 AccessDeniedException 传播到 Spring Security 3.2