java-8wildfly-10jersey-1.0java-security

How to set temporary file creation permission in wildly 10


I have enabled security-manager in wildly 10 with below configuration in standalone.xml but when I am starting wildly 10 application server getting following exception(added full exception log) :

   13:49:50,667 INFO  [com.sun.jersey.server.impl.application.WebApplicationImpl] (ServerService Thread Pool -- 57) Initiating Jersey application, version 'Jersey: 1.19.1 03/11/2016 02:08 PM'
13:49:51,229 SEVERE [com.sun.jersey.core.spi.component.ProviderFactory] (ServerService Thread Pool -- 57) The provider class, class com.sun.jersey.multipart.impl.MultiPartReaderServerSide, could not b
e instantiated. Processing will continue but the class will not be utilized: java.lang.SecurityException: Unable to create temporary file
        at java.io.File.createTempFile(File.java:2018)
        at java.io.File.createTempFile(File.java:2070)
        at com.sun.jersey.multipart.impl.MultiPartReaderClientSide.createMimeConfig(MultiPartReaderClientSide.java:121)
        at com.sun.jersey.multipart.impl.MultiPartReaderClientSide.<init>(MultiPartReaderClientSide.java:109)
        at com.sun.jersey.multipart.impl.MultiPartReaderServerSide.<init>(MultiPartReaderServerSide.java:71)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at com.sun.jersey.core.spi.component.ComponentConstructor._getInstance(ComponentConstructor.java:210)
        at com.sun.jersey.core.spi.component.ComponentConstructor.getInstance(ComponentConstructor.java:180)
        at com.sun.jersey.core.spi.component.ProviderFactory.__getComponentProvider(ProviderFactory.java:166)
        at com.sun.jersey.core.spi.component.ProviderFactory.getComponentProvider(ProviderFactory.java:137)
        at com.sun.jersey.core.spi.component.ProviderServices.getComponent(ProviderServices.java:283)
        at com.sun.jersey.core.spi.component.ProviderServices.getServices(ProviderServices.java:163)
        at com.sun.jersey.core.spi.factory.MessageBodyFactory.initReaders(MessageBodyFactory.java:176)
        at com.sun.jersey.core.spi.factory.MessageBodyFactory.init(MessageBodyFactory.java:162)
        at com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1338)
        at com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:180)
        at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:799)
        at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:795)
        at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193)
        at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:795)
        at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:790)
        at com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:509)
        at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:339)
        at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:605)
        at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:207)
        at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:394)
        at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:577)
        at javax.servlet.GenericServlet.init(GenericServlet.java:244)
        at io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:117)
        at org.wildfly.extension.undertow.security.RunAsLifecycleInterceptor.init(RunAsLifecycleInterceptor.java:78)
        at io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:103)
        at io.undertow.servlet.core.ManagedServlet$DefaultInstanceStrategy.start(ManagedServlet.java:231)
        at io.undertow.servlet.core.ManagedServlet.createServlet(ManagedServlet.java:132)
        at io.undertow.servlet.core.DeploymentManagerImpl.start(DeploymentManagerImpl.java:526)
        at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:101)
        at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:82)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
        at org.jboss.threads.JBossThread.run(JBossThread.java:320)

My product development environment is -jdk8 , jersey 1.19.1 and wildly 10 . Can anyone help me out here please where I am going wrong ?

<subsystem xmlns="urn:jboss:domain:security-manager:1.0">
            <deployment-permissions>
                <minimum-set>
                    <permission class="java.lang.RuntimePermission" name="getClassLoader" actions="read,write"/>
                    <permission class="java.lang.reflect.ReflectPermission" name="suppressAccessChecks" actions="read,write"/>
                    <permission class="java.util.PropertyPermission" name="*" actions="read"/>
                    <permission class="java.lang.RuntimePermission" name="accessClassInPackage.sun.reflect" actions="read,write"/>
                    <permission class="java.lang.RuntimePermission" name="accessDeclaredMembers" actions="read,write"/>
                    <permission class="java.lang.RuntimePermission" name="shutdownHooks"/>
                    <permission class="javax.management.MBeanPermission" name="*" actions="queryNames"/>
                    <permission class="javax.management.MBeanServerPermission" name="*"/>
                    <permission class="javax.management.MBeanPermission" name="*" actions="registerMBean"/>
                    <permission class="javax.management.MBeanTrustPermission" name="*"/>
                    <permission class="java.io.FilePermission" name="*" actions="read,write"/>
                </minimum-set>
            </deployment-permissions>
        </subsystem>

Solution

  • The File.createTempFile() is attempting to create a file in the directory the java.io.tmpdir is set to. In a FilePermission when you use * for the name it means "all files in the current directory". What you probably need is <<ALL FILES>> for the name.

    <permission class="java.io.FilePermission" name="<<ALL FILES>>" actions="read,write,delete"/>