Security 使用安全性配置Jersey测试框架

Security 使用安全性配置Jersey测试框架,security,rest,jersey,jetty,Security,Rest,Jersey,Jetty,我正在使用Jersey编写一个RESTWeb服务,并尝试编写一组单元测试来使用Jersey测试框架测试该服务 然而,我使用HTTP身份验证和SecurityContext作为web服务的一部分,我在设置JTF以允许我测试这些方面时遇到了问题。我可以在请求中发送身份验证信息,但如何配置它以了解我希望设置的不同角色和用户 我目前正在使用Jetty(通过JettyTestContainerFactory),但如果需要,可以切换到不同的测试容器 我试图实现的具体配置是两个角色和四个用户,以及这些可能角色

我正在使用Jersey编写一个RESTWeb服务,并尝试编写一组单元测试来使用Jersey测试框架测试该服务

然而,我使用HTTP身份验证和SecurityContext作为web服务的一部分,我在设置JTF以允许我测试这些方面时遇到了问题。我可以在请求中发送身份验证信息,但如何配置它以了解我希望设置的不同角色和用户

我目前正在使用Jetty(通过JettyTestContainerFactory),但如果需要,可以切换到不同的测试容器


我试图实现的具体配置是两个角色和四个用户,以及这些可能角色的组合(例如,无角色、角色a、角色b、角色a和角色b)。web服务将处理对不同URL的访问,因此不需要在配置中指定。我通过实现自己的Jetty测试容器(类似于Jersey提供的容器)实现了这一点。我们通常使用嵌入式Jetty来测试开发中的应用程序,并且通过基于该嵌入式Jetty创建我们自己的测试容器,它加载我们的web应用程序,就像它由Java主进程启动一样

我们使用在Jetty-env.xml文件中配置的自定义Jetty安全处理程序,嵌入式Jetty使用该文件配置安全性

<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>
该xml中引用的users.properties文件是一个简单的用户到角色映射,例如。 用户名=密码,角色名称1,角色名称2

根据您配置Jetty安全性的方式,这可能适用于您,也可能不适用于您。您也可以通过编程方式配置它,这里有很多嵌入式Jetty的示例。SecuredHelloHandler.java示例可能是一个良好的开端

对于测试容器,基本上可以通过复制
org.glassfish.jetty.test.jetty.JettyTestContainerFactory
org.glassfish.jetty.jetty.JettyHttpContainerFactory
来开始

public static Server createServer(final URI uri, final SslContextFactory sslContextFactory, final JettyHttpContainer handler, final boolean start)
方法创建嵌入式Jetty服务器的版本,并根据需要配置安全性

public static Server createServer(final URI uri, final SslContextFactory sslContextFactory, final JettyHttpContainer handler, final boolean start)