我有一个Spring启动配置服务。通常我会在本地测试它,然后在AWS ElasticBeansStalk上将其作为.war部署到Tomcat。
事情是:与我的开发环境(我在服务中嵌入Tomcat,弹出启动的默认值)相比,在AWS上投放的BadCredentialsException的格式有所不同,例如:
如果我在本地抛出BadCredentials异常,我会收到JSON错误:
{
"timestamp": 1445622806489,
"status": 401,
"error": "Unauthorized",
"message": "Invalid user/password",
"path": "/user"
}
如果与部署的服务遇到相同的错误,我会得到这个无格式的混乱:
<!DOCTYPE html>
<html>
<head>
<title>Apache Tomcat/8.0.23 - Error report</title>
<style type="text/css">H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}.line {height: 1px; background-color: #525D76; border: none;}</style>
</head>
<body>
<h1>HTTP Status 401 - Invalid user/password</h1>
<div class="line"></div>
<p>
<b>type</b> Status report
</p>
<p>
<b>message</b>
<u>Invalid user/password</u>
</p>
<p>
<b>description</b>
<u>This request requires HTTP authentication.</u>
</p>
<hr class="line">
<h3>Apache Tomcat/8.0.23</h3>
</body>
</html>
我可以使用Spring做任何配置,所以我可以在所有错误消息上强制执行前一种格式,即使导出到.war吗?
答案 0 :(得分:0)
问题是由ErrorPageFilter
引起的,在嵌入式环境中不需要但在非嵌入式环境中使用,因此,当部署到.war时,它可能会导致问题,具体取决于配置,如上所述在Spring Boot的github的this错误报告中。
该问题的一个解决方案是验证是否已启用默认的Spring Boot Security设置,删除任何@EnableWebSecurity
或将/error
添加到应用程序的排除路径。