Dropwizard admin servlet 的安全性(版本 1.1.1)
Security for Dropwizard admin servlet (version 1.1.1)
我正在使用 Dropwizard (1.1.1)
。
我的安全上下文是这样定义的:
environment.jersey().register(new AuthDynamicFeature(new BasicCredentialAuthFilter.Builder<User>()
.setAuthenticator(new BasicAuthenticator())
.setAuthorizer(new BasicAuthorizer())
.setRealm("SECURITY REALM")
.buildAuthFilter()));
environment.jersey().register(new AuthValueFactoryProvider.Binder<>(User.class));
environment.jersey().register(RolesAllowedDynamicFeature.class);
最近我将我的管理页面移到了我的网络应用程序中。代码就在这里:
environment.getApplicationContext().setAttribute(
MetricsServlet.METRICS_REGISTRY,
environment.metrics());
environment.getApplicationContext().setAttribute(
HealthCheckServlet.HEALTH_CHECK_REGISTRY,
environment.healthChecks());
environment.getApplicationContext().addServlet(
new NonblockingServletHolder(new AdminServlet()), "/admin/*");
如何向 Dropwizard admin servlet
添加安全上下文?
我已经看过这个 Whosebug answer,但似乎没有任何效果。看起来该答案中的所有内容均已弃用。
好吧,管理 servlet 是一个普通的旧 servlet,而不是 Jersey 资源。鉴于您正在应用程序上下文中创建一个新的管理 servlet(是否禁用默认管理上下文?),您可以像这样简单地向应用程序上下文注册一个 servlet 过滤器:
environment.getApplicationContext().addFilter(new FilterHolder(new AdminServletFilter()), "/admin/*", EnumSet.of(DispatcherType.REQUEST));
您的 AdminServletFilter
可以按照您喜欢的任何方式验证用户身份,例如,如果您想进行基本身份验证,请使用此 implementation.
就是说,如果您打算将您的管理 servlet 移动到与您的应用程序连接器相同的端口上的 运行,那么更好的方法是通过配置:
server:
type: simple
adminContextPath: /admin
applicationContextPath: /
connector:
type: http
port: 8080
此外,我已经使用适用于最新 Dropwizard 版本 here 的安全处理程序实现更新了您链接到的问题。有了这个,您可以通过注册安全处理程序来保护管理 servlet:
environment.admin().setSecurityHandler(new AdminConstraintSecurityHandler("admin", "supersecret"));
我正在使用 Dropwizard (1.1.1)
。
我的安全上下文是这样定义的:
environment.jersey().register(new AuthDynamicFeature(new BasicCredentialAuthFilter.Builder<User>()
.setAuthenticator(new BasicAuthenticator())
.setAuthorizer(new BasicAuthorizer())
.setRealm("SECURITY REALM")
.buildAuthFilter()));
environment.jersey().register(new AuthValueFactoryProvider.Binder<>(User.class));
environment.jersey().register(RolesAllowedDynamicFeature.class);
最近我将我的管理页面移到了我的网络应用程序中。代码就在这里:
environment.getApplicationContext().setAttribute(
MetricsServlet.METRICS_REGISTRY,
environment.metrics());
environment.getApplicationContext().setAttribute(
HealthCheckServlet.HEALTH_CHECK_REGISTRY,
environment.healthChecks());
environment.getApplicationContext().addServlet(
new NonblockingServletHolder(new AdminServlet()), "/admin/*");
如何向 Dropwizard admin servlet
添加安全上下文?
我已经看过这个 Whosebug answer,但似乎没有任何效果。看起来该答案中的所有内容均已弃用。
好吧,管理 servlet 是一个普通的旧 servlet,而不是 Jersey 资源。鉴于您正在应用程序上下文中创建一个新的管理 servlet(是否禁用默认管理上下文?),您可以像这样简单地向应用程序上下文注册一个 servlet 过滤器:
environment.getApplicationContext().addFilter(new FilterHolder(new AdminServletFilter()), "/admin/*", EnumSet.of(DispatcherType.REQUEST));
您的 AdminServletFilter
可以按照您喜欢的任何方式验证用户身份,例如,如果您想进行基本身份验证,请使用此 implementation.
就是说,如果您打算将您的管理 servlet 移动到与您的应用程序连接器相同的端口上的 运行,那么更好的方法是通过配置:
server:
type: simple
adminContextPath: /admin
applicationContextPath: /
connector:
type: http
port: 8080
此外,我已经使用适用于最新 Dropwizard 版本 here 的安全处理程序实现更新了您链接到的问题。有了这个,您可以通过注册安全处理程序来保护管理 servlet:
environment.admin().setSecurityHandler(new AdminConstraintSecurityHandler("admin", "supersecret"));