简体   繁体   English

小程序中的netty抛出AccessControlException

[英]netty in applet throws AccessControlException

I am using netty 3 in applet and when I start it from a browser it gives me following stacktrace in Java Console, if I run from Eclipse Applet Viewer then this issue does not happen: 我在applet中使用netty 3,当我从浏览器启动它时,它会在Java控制台中显示以下堆栈跟踪信息,如果我是从Eclipse Applet Viewer运行的,则不会发生此问题:

network: Cache entry not found [url: http://<IP address>/crossdomain.xml, version: null]
network: Connecting http://<IP address>/crossdomain.xml with proxy=DIRECT
network: Connecting http://<IP address>:80/ with proxy=DIRECT
java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at sun.net.NetworkClient.doConnect(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.<init>(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
    at com.sun.deploy.net.CrossDomainXML$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.deploy.net.CrossDomainXML.privilegedConnect(Unknown Source)
    at com.sun.deploy.net.CrossDomainXML.check(Unknown Source)
    at com.sun.deploy.net.CrossDomainXML.check(Unknown Source)
    at sun.plugin2.applet.SecurityManagerHelper.checkConnectHelper(Unknown Source)
    at sun.plugin2.applet.AWTAppletSecurityManager.checkConnect(Unknown Source)
    at sun.nio.ch.SocketChannelImpl.connect(Unknown Source)
    at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink.connect(NioClientSocketPipelineSink.java:150)
    at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink.eventSunk(NioClientSocketPipelineSink.java:113)
    at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendDownstream(DefaultChannelPipeline.java:771)
    at org.jboss.netty.handler.codec.oneone.OneToOneEncoder.handleDownstream(OneToOneEncoder.java:60)
    at org.jboss.netty.channel.DefaultChannelPipeline.sendDownstream(DefaultChannelPipeline.java:591)
    at org.jboss.netty.channel.DefaultChannelPipeline.sendDownstream(DefaultChannelPipeline.java:582)
    at org.jboss.netty.channel.Channels.connect(Channels.java:541)
    at org.jboss.netty.channel.AbstractChannel.connect(AbstractChannel.java:210)
    at org.jboss.netty.bootstrap.ClientBootstrap.connect(ClientBootstrap.java:227)
    at org.jboss.netty.bootstrap.ClientBootstrap.connect(ClientBootstrap.java:188)
    at org.mypackage.Myclass.connect(Client.java:80)

And also this 还有这个

Exception caught: [id: 0x00498342] EXCEPTION: java.security.AccessControlException: access denied ("java.net.SocketPermission" "<IP address>:18090" "connect,resolve")
Exception caught: [id: 0x00498342] EXCEPTION: java.nio.channels.ClosedChannelException

I test at local PC but specify its IP address to connect. 我在本地PC上进行测试,但指定了要连接的IP地址。

This is line 80 in my connect method: 这是我的connect方法中的第80行:

future = bootstrap.connect(new InetSocketAddress(host, port));

I have tried to surround it with no success 我试图围绕它没有成功

    AccessController.doPrivileged(
        new PrivilegedAction<Void>() {
            public Void run () {
                MyClass.connect(type, userId, secondValue);
                return null;
            }
         }
    );

Please, advice how can I solve it? 请提出建议,我该如何解决?

I was able to solve the problem. 我能够解决问题。

First, I have tried to connect to 127.0.0.1 , but for that I had to install Jetty and put my applet and hmtl inside jetty. 首先,我尝试连接到127.0.0.1 ,但是为此我必须安装Jetty并将applet和hmtl放置在jetty中。 So it started to work for localhost only. 因此它开始仅适用于本地主机。

Socket connection to originating server of an unsigned Java applet 与未签名的Java小程序的原始服务器的套接字连接

It still didn't work for 10.xyz, so I had to sign applet 它对于10.xyz仍然不起作用,所以我必须签署applet

Is it possible to sign a java applet for free? 是否可以免费签署Java Applet?

and also to create crossdomain.xml in jetty like here: 并在码头上创建crossdomain.xml ,如下所示:

access denied (java.net.SocketPermission 127.0.0.1:8080 connect,resolve) 访问被拒绝(java.net.SocketPermission 127.0.0.1:8080 connect,resolve)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM