java - 禁用错误消息:AccessDeniedException:访问被拒绝
问题描述
我使用这个自定义错误处理程序:
@Component
public class OAuth2AuthenticationEntryPoint implements AuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest request, HttpServletResponse response,
AuthenticationException ex) throws IOException {
ErrorDetail errorDetail = ErrorDetail.AUTHENTICATION_ERROR;
ErrorResponse errorEntry = new ErrorResponse();
errorEntry.setTitle(errorDetail.getTitle());
errorEntry.setCode(errorDetail.getErrorCode());
HttpStatus httpStatus = ErrorDetail.getHttpStatusBasedOnErrorCode(errorDetail.getErrorCode());
errorEntry.setStatus(httpStatus.value());
errorEntry.setDetail(ex.getMessage());
Map<String, String> extra = new HashMap<String, String>();
extra.put("detail", ex.getMessage());
errorEntry.setExtra(extra);
ErrorResponseDTO errorResponse = new ErrorResponseDTO();
errorResponse.setErrors(Arrays.asList(errorEntry));
response.setStatus(errorDetail.getHttpStatus().value());
String json = new ObjectMapper().setDefaultPropertyInclusion(JsonInclude.Include.NON_NULL).writeValueAsString(errorResponse);
response.getWriter().write(json);
response.flushBuffer();
}
}
我得到这个错误响应,因为它应该是:
{"errors":[{"status":404,"code":"1000","title":"Authentication error","detail":"Full authentication is required to access this resource","extra":{"detail":"Full authentication is required to access this resource"}}]}
但是我进入服务器日志这个错误:
21:34:30.498 [http-nio-8090-exec-7] DEBUG AffirmativeBased[decide:66] - Voter: org.springframework.security.web.access.expression.WebExpressionVoter@33252ffb, returned: -1
21:34:30.498 [http-nio-8090-exec-7] DEBUG ExceptionTranslationFilter[handleSpringSecurityException:180] - Access is denied (user is anonymous); redirecting to authentication entry point
org.springframework.security.access.AccessDeniedException: Access is denied
at org.springframework.security.access.vote.AffirmativeBased.decide(AffirmativeBased.java:84)
at org.springframework.security.access.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:233)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:123)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:118)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
您知道每次收到 AuthenticationException 时如何抑制或禁用此错误吗?
解决方案
这是DEBUG
用于开发目的的级别日志,没关系。在生产级别,日志级别不应低于该WARN
级别,因此不会记录这些异常,这不是问题。
如果您坚持要修改行为,Spring 允许在类上设置日志级别或使用OFF
. 我发现将其关闭是令人沮丧的,因为您可能会错过更严重的日志,因此也可以在不同级别上记录异常。
打开application.properties
并写入以下之一:
- 禁用所有日志:
org.springframework.security.access.AccessDeniedException=OFF
- 至少
ERROR
等级:org.springframework.security.access.AccessDeniedException=ERROR
- 至少
WARN
等级:org.springframework.security.access.AccessDeniedException=WARN
推荐阅读
- flutter - 如何使用 Flutter hive 创建标记为 fabourite 按钮?
- javascript - 如何添加条件删除类 -
- c# - 如何制作一个从C#中的列表返回值的函数
- python - DataSpell (JetBrains) 在 Jupyter 笔记本中显示错误:“您的浏览器不支持 WebGL ...”
- flutter - 无法在 Flutter Video Player 中播放 IPTV 频道
- nlp - `pylucene` 和 `pyhanlp` 之间有冲突吗?
- java - Java - 将对象插入队列,但在 java 中出现异常,即使节点已初始化
- python - 如何在 Python Pandas 中查找文件
- python - 当熊猫数据框中只有一行时获取特定列的值
- python - 使用Sqlalchemy查询SQL,无法返回最新数据