我正在使用Jersey编写REST web服务,并尝试编写一组单元测试,以使用Jersey测试框架测试该服务。
然而,我使用HTTP身份验证和SecurityContext作为我的web服务的一部分,我在设置JTF以允许我测试这些方面时遇到了问题。我可以在请求中发送身份验证信息,但如何配置它以了解我希望设置的不同角色和用户?
我目前正在使用Jetty(通过JettyTestContainerFactory),但如果需要,可以切换到不同的测试容器。
我试图实现的具体配置是两个角色和四个用户,以及这些可能角色的组合(例如,没有角色、角色a、角色b、角色a和b)。web服务将处理对不同URL的访问,因此不需要在配置中指定。
我实现了自己的Jetty测试容器,类似于Jersey提供的测试容器。我们使用嵌入式Jetty来正常测试开发中的应用程序,并基于该嵌入式Jetty创建我们自己的测试容器,从而加载我们的web应用程序,就像它由Java主进程启动一样。
我们使用在Jetty env中配置的自定义Jetty安全处理程序。嵌入式Jetty用于配置安全性的xml文件。
<Set name="securityHandler">
<New class="com.example.DevelopmentSecurityHandler">
<Set name="loginService">
<New class="com.example.DevelopmentLoginService">
<Set name="name">LocalRealm</Set>
<Set name="config">src/main/webapp/WEB-INF/users.properties</Set>
<Call name="start" />
</New>
</Set>
<Set name="authenticator">
<New class="com.example.DevelopmentAuthenticator"></New>
</Set>
<Set name="checkWelcomeFiles">true</Set>
</New>
</Set>
该Jetty env文件由嵌入式Jetty加载:
XmlConfiguration configuration = null;
if (jettyEnvFile.exists()) {
try {
configuration = new XmlConfiguration(jettyEnvFile.toURI().toURL());
} catch (Exception e) {
throw new ProcessingException(String.format("Exception loading jetty config from %s", jettyEnvFile));
}
} else {
LOG.warn("No jetty-env.xml found.");
}
该xml中引用的users.properties文件是一个简单的用户到角色映射,例如USERNAME=PASSWORD、ROLE_NAME1、ROLE_NAME2
根据您如何配置Jetty安全性,这可能适合您,也可能不适合您。您还可以以编程方式配置它,这里有很多嵌入式Jetty的示例。SecuredHelloHandler.java示例可能是您的良好开端。
对于测试容器,您基本上可以从复制org.glassfish.jersey.test.jetty.JettyTestContainerFactory
和org.glassfish.jersey.jetty.JettyHttpContainerFactory
开始
public static Server createServer(final URI uri, final SslContextFactory sslContextFactory, final JettyHttpContainer handler, final boolean start)
方法创建嵌入式Jetty服务器的版本,并根据需要配置安全性。
我有一个有点困难的情况。我正在使用泽西提供REST服务。 在我的运行时中,我使用版本1.16.0执行此操作: 这是我的资源类: 这是有效的,我得到了预期的json响应。 现在我找到了一个为集成测试提供内存服务器的杰西测试框架。 不幸的是,这似乎只适用于泽西2。x、 所以我为我的测试添加了一个额外的梯度设置: 这是我的测试课: 只要我的资源返回字符串,这个设置就可以运行。但是,只要我返回一个响应,如
我正在从事一个用Jersey 2(用于RESTAPI)和Spring(用于DI)实现的REST项目,我想编写功能/集成测试。我尝试使用JerseyTest框架并使用真实的数据库进行这些测试。我唯一想模拟的是我的应用程序使用的远程Web服务(SOAP),为此我应该模拟生成的WS客户端。 在花了大量时间研究Jersey2和Spring的JerseyTest框架之后,似乎不可能为集成测试设置该框架。你能
我有一个问题,让昂首阔步的博士一代工作。 以下是我使用的专家: 我在ResourceConfig类中添加了swagger ressources: 然后我声明了一个 servlet 来配置 Swagger: 通过上面的配置,可以使用swagger servlet:如果我浏览到api文档url,我会得到以下信息: 但是,如果我使用如下所示的真实配置更改 swagger servlet 配置中的 api
我在泽西(从文档中)创建了这个测试,它运行良好,但有一个问题:没有被调用。 我需要测试的资源类依赖于ServletContextListener在ServletContext上设置的属性。 我可以确保它被调用吗,或者我可以用其他方式操纵ServletContext吗? 我添加了这些依赖项来实现这一点:
若要配置安全性设置,请前往“配置”->“安全性”。 你可以更改用户密码的复杂性要求以提高密码强度,以及强制注销所有其他用户会话。 如果要在 Navicat Monitor 和客户端之间使用加密连接(HTTPS 会话),你可以将 Navicat Monitor 配置为使用 SSL/TLS 协议。请点击“+ 添加证书”并配置以下信息: 名 輸入证书的名。 证书 粘贴证书文件的内容。 私钥 粘贴私钥文件
Testing Method Security This section demonstrates how to use Spring Security’s Test support to test method based security. We first introduce a MessageService that requires the user to be authenticate