2017-04-22 4 views
1

Instanziieren JerseyTest mit dieser KlasseJerseyTest mit shiro

public class NMAAbstractRestTest extends JerseyTest { 

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

} 

NMAdaptorApplication Konstruktor.

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(); 

} 

während des folgenden Testverfahren ausführt

@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); 
} 

immer die folgende Ausnahme

16: 34: 23,893 ERROR [Grizzly-HTTP-Server-0] crrneNMRestExceptionMapper - Ausnahme gefangen bei Mapper: Kein SecurityManager, auf den der aufrufende Code zugreifen kann, der entweder an den org.apache.shiro.util.ThreadContext oder als statischer vm-Singleton gebunden ist. Dies ist eine ungültige Anwendungskonfiguration. org.apache.shiro.UnavailableSecurityManagerException: Kein SecurityManager, auf den der aufrufende Code zugreifen kann, der entweder an den org.apache.shiro.util.ThreadContext oder als statischer vm-Singleton gebunden ist. Dies ist eine ungültige Anwendungskonfiguration. bei org.apache.shiro.SecurityUtils.getSecurityManager (SecurityUtils.java:123) bei org.apache.shiro.subject.Subject $ Builder. (Subject.java:627)

Ich denke, seine wegen Shiro-Filter, den ich in web.xml konfiguriert habe

<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> 

während JUnit Test dies fehlschlägt. Gibt es eine Möglichkeit, web.xml in JerseyTest

Antwort

2

aufzunehmen Ich weiß nicht, ob dies das Problem lösen wird, da ich Shiro nicht verwende, aber wenn Sie Dinge konfigurieren möchten, die sonst im Web konfiguriert wären .xml, du musst etwas mehr arbeiten.

Zuerst muss der Test in einem Servlet-Container ausgeführt werden. Unter der Annahme, sind Sie Grizzly mit (beachten Sie, das ist die In-Memory-Anbieter nicht möglich verwenden), müssen Sie die GrizzlyWebTestContainerFactory

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

Dann müssen Sie verwenden, um die DeploymentContext konfigurieren. Hier können Sie Ihre Servlet-Container-Konfigurationen vornehmen können

@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(); 
} 

Siehe auch:

+0

Perfect, nicht gelöst noch, aber jetzt braucht es zusätzliche shiro configs. Ich hoffe, ich kann es lösen. Ich werde aktualisieren, sobald ich fertig bin. – vels4j

Verwandte Themen