与四郎JerseyTest(JerseyTest with shiro)

2019-09-27 03:12发布

实例JerseyTest这个类

public class NMAAbstractRestTest extends JerseyTest {

  @Override
  protected Application configure() {
    NMAdaptorApplication application = new NMAdaptorApplication();
    return application;
  }

}

NMAdaptorApplication构造。

public NMAdaptorApplication() {
    log.info("NM-Adaptor-Application is being initilized....");
    register(NMRestExceptionMapper.class);
    register(ShiroFeature.class);
    register(NMMarshallingFeature.class);
    register(new LoggingFeature(java.util.logging.Logger.getLogger("nma"), LoggingFeature.Verbosity.PAYLOAD_ANY));
    packages(true, "com.retailwave.rwos.nma.rest.resource");
    loadProperties();

}

在执行以下的试验方法

@Test
public void makeOrder()
{  
   ...
   Entity entity = Entity.entity(orderContent, MediaType.APPLICATION_JSON);
   WebTarget target = target("customerorders");
   target.path("");
   target.queryParam("cmd", "create");
   target.queryParam("branchCode", "610");
   arget.property(HttpAuthenticationFeature.HTTP_AUTHENTICATION_BASIC_USERNAME, "admin");
   target.property(HttpAuthenticationFeature.HTTP_AUTHENTICATION_BASIC_PASSWORD, "admin");
   Response response = target.request().post(entity);
}

收到以下异常

16:34:23.893 ERROR [Grizzly的HTTP服务器 - 0] crrneNMRestExceptionMapper - 异常在映射器捕获:没有安全管理器可访问到调用代码,无论是结合到org.apache.shiro.util.ThreadContext或作为VM静态单。 这是一个无效的应用程序配置。 org.apache.shiro.UnavailableSecurityManagerException:没有安全管理器访问到调用代码,无论是绑定到org.apache.shiro.util.ThreadContext或作为VM静态单。 这是一个无效的应用程序配置。 在org.apache.shiro.SecurityUtils.getSecurityManager(SecurityUtils.java:123)在org.apache.shiro.subject.Subject $生成器。(Subject.java:627)

我猜测它由于四郎滤波器,我在web.xml配置

 <filter>
    <filter-name>ShiroFilter</filter-name>
    <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
 </filter>

<filter-mapping>
    <filter-name>ShiroFilter</filter-name>
    <url-pattern>/*</url-pattern>
 </filter-mapping>

而JUnit测试失败。 是否有任何选项,包括在web.xml中JerseyTest

Answer 1:

我不知道这是否会解决这个问题,因为我不使用四郎,但如果你要配置的东西,否则将在web.xml配置,你需要做一些更多的工作。

首先需要在servlet容器中运行测试。 假设,你使用的灰熊(注意,这是不可能的使用内存供应商),你需要使用GrizzlyWebTestContainerFactory

@Override
protected TestContainerFactory getTestContainerFactory() {
    return new GrizzlyWebTestContainerFactory();
}

然后,你需要配置DeploymentContext 。 在这里,你可以让你的servlet容器配置

@Override
protected DeploymentContext configureDeployment() {
    // just configure the ResourceConfig here instead of the `configure`.
    final ResourceConfig config = new ResourceConfig();
    return ServletDeploymentContext
            .forServlet(new ServletContainer(config))
            .addFilter(ShiroFilter.class, "ShiroFilter")
            .build();
}

也可以看看:

  • Javadoc中ServletDeploymentContext 。
  • 源代码的测试实例


文章来源: JerseyTest with shiro