我想做什么:
我正在尝试运行一个带有嵌入式 Jolokia 的示例 Spring 启动应用程序,在其上配置基本身份验证并从 hawt.io 连接到它,我有点试点项目。
我的设置(所有内容在本地主机上,没有防火墙):
- 端口 8080 上的 Spring 应用程序(默认)
- 港口 5555 上的霍蒂奥
我正在使用最新的弹簧启动,可用于使用 jolokia 和 hawt.io 的示例应用程序(免责声明我对 spring boot 和 spring 安全性相当陌生)
春季启动版本:1.5.2 发布 春季安全性:4.2.2 发布 乔洛基亚:1.3.5
测试 1:完全在没有 spring 安全性的情况下运行(我已经在application.properties
中设置了management.security.enabled=false
) - 一切都按预期工作,我可以连接到 localhost:8080/jolokia 没有任何用户/密码,无论是从我的浏览器还是从我在本地运行的应用程序 hawt.io
测试 2:注释掉行management.security.enabled=false
并创建以下配置文件以插入 spring 安全性:
@Configuration
@EnableWebSecurity
public class SpringSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("admin")
.password("admin")
.roles("ACTUATOR");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/").permitAll()
.antMatchers("/error").permitAll()
.antMatchers("/jolokia/**").hasRole("ACTUATOR")
.and().httpBasic();
}
}
完成此步骤后,我看到从浏览器连接到localhost:8080/jolokia时,我看到一个基本的身份验证弹出窗口,我输入admin/admin并看到Jolokia响应,所以我得出结论,我的弹簧安全设置是可以的
现在是时候运行 hawt.io 了:
java -jar hawtio-app-1.5.0.jar --port 5555
现在,当我在输入我的localhost:8080/jolokia连接(它没有任何用户/密码文本字段)的详细信息后 hawt.io UI上点击"连接"时,它会将我扔到 hawt.io 登录屏幕。当我在那里输入管理员/管理员时,我看到"无法连接,禁止"UI 消息。
我尝试查看 hawt.io 发送到我的本地主机:8080(使用打嗝套件)的请求,我看到在看到 hawt.io 登录屏幕之前,我在尝试查询 401 上的 jolokia 时看到很多 8080(未经授权)响应(当然我这样做,因为它在输入 admin/admin 之前 - 所以没有机会提前知道)。 进入 hawtio 的登录屏幕后,输入管理员/管理员并按"登录" - 我根本没有看到从 hawt.io 到 8080 的任何请求。我只看到一个从 UI 到 hawt.io 服务器的请求,该请求以 403 响应。所以我怀疑它是 hawt.io 本身的内部身份验证窗口,它与 jolokia 无关。
所以我要问的是 - 我在此设置中缺少什么,我应该如何配置 hawt.io 以便能够连接到我的设置?
提前非常感谢
将 jolokia 主机名添加到属性中hawtio.proxyWhitelist
为我完成了这项工作。
尝试将endpoints.jolokia.sensitive=false
添加到 Spring Bootapplication.properties
中。
默认情况下,Spring Boot 将 Jolokia 视为"敏感"资源,这可能会导致访问 Jolokia 的授权错误。