我正在尝试使用glassfish 4的端口统一来将任何http请求重定向到https。我可以很容易地用V3做到这一点,但是我在glassfish v4 -Java1.7上遇到了问题。
我在glassfish v4中执行的命令-
asadmin create-protocol --securityenabled=false http-redirect asadmin create-protocol-filter --protocol http-redirect --classname org.glassfish.grizzly.config.portunif.HttpRedirectFilter redirect-filter
asadmin create-protocol --securityenabled=false pu-protocol asadmin create-protocol-finder --protocol pu-protocol --targetprotocol http-listener-2 --classname org.glassfish.grizzly.config.portunif.HttpProtocolFinder http-finder asadmin create-protocol-finder --protocol pu-protocol --targetprotocol http-redirect --classname org.glassfish.grizzly.config.portunif.HttpProtocolFinder http-redirect
设置configs.config.server-config.network-config.network-listeners.network-listener.http-listener-1.protocol=pu-protocol
执行上述所有命令时都不会出现错误。但是,当我尝试访问web时,它抛出异常,并且http地址无法启动- localhost:8080失败
Glassfish中的异常-
警告:在org.glassfish.grizzly.memory.HeapMemoryManager$TrimmableHeapBuffer执行过程中出现异常FilterChain :无法将org.glassfish.grizzly.memory.HeapMemoryManager$TrimmableHeapBuffer强制转换为org.glassfish.grizzly.config.portunif.HttpRedirectFilter.handleRead(HttpRedirectFilter.java:99) at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206) at org.glassfish.grizzly.filterchain的java.lang.ClassCastException.DefaultFilterChain.execute(DefaultFilterChain.java:136)在org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)在org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)在org.glassfish.grizzly.portunif.PUFilter.handleRead(PUFilter.java:231)在org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206) at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136) at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114) at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838) at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115) at org。glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544) at java.lang.Thread.run(Thread.java:722)
如果这个问题可以解决,有没有其他方法可以将端口从http重定向到https?
发布于 2014-08-22 01:27:49
确保您的最后一个命令包含"asadmin“,因为set是一个DOS命令。
当我使用以下命令(尽管它看起来与您的命令非常相似)时,这在我的GlassFish 4.0中起作用:
asadmin create-protocol --securityenabled=false http-redirect
asadmin create-http-redirect --redirect-port 8181 --secure-redirect true http-redirect
asadmin create-protocol --securityenabled=false pu-protocol
asadmin create-protocol-filter --protocol http-redirect --classname org.glassfish.grizzly.config.portunif.HttpRedirectFilter redirect-filter
asadmin create-protocol-finder --protocol pu-protocol --targetprotocol http-listener-2 --classname org.glassfish.grizzly.config.portunif.HttpProtocolFinder http-finder
asadmin create-protocol-finder --protocol pu-protocol --targetprotocol http-redirect --classname org.glassfish.grizzly.config.portunif.HttpProtocolFinder http-redirect
asadmin set configs.config.server-config.network-config.network-listeners.network-listener.http-listener-1.protocol=pu-protocol我注意到这会导致http-listener-1的HTTP选项卡(Configurations --> server-config --> Network Config --> Network Listeners --> http-listener-1 --> SSL选项卡)不再显示。对我来说不是问题。
发布于 2015-06-19 10:31:06
所以我不知道为什么,但当我使用协议名pu-protocol时,它不会正确配置,也不会显示在管理控制台的协议列表下。我所要做的就是为协议使用一个不同的名称,一切都工作得很好。我使用了名称portunif protocol,只要我运行命令创建它,它就会出现在Glassfish管理控制台的协议部分下,正如您所期望的那样。现在我已经让我的网站按照期望重定向到https!
我使用的命令:
asadmin create-protocol --securityenabled=false http-redirect
asadmin create-http-redirect --redirect-port 443 --secure-redirect true http-redirect
asadmin create-protocol --securityenabled=false portunif-protocol
asadmin create-protocol-filter --protocol http-redirect --classname org.glassfish.grizzly.config.portunif.HttpRedirectFilter redirect-filter
asadmin create-protocol-finder --protocol portunif-protocol --targetprotocol http-listener-2 --classname org.glassfish.grizzly.config.portunif.HttpProtocolFinder http-finder
asadmin create-protocol-finder --protocol portunif-protocol --targetprotocol http-redirect --classname org.glassfish.grizzly.config.portunif.HttpProtocolFinder http-redirect
asadmin set configs.config.server-config.network-config.network-listeners.network-listener.http-listener-1.protocol=portunif-protocol希望这对其他遇到和我一样的问题的人有所帮助。
https://stackoverflow.com/questions/25122025
复制相似问题