You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by "Tuan (JIRA)" <ji...@apache.org> on 2018/10/09 04:05:00 UTC

[jira] [Comment Edited] (FTPSERVER-476) NullPointerException when SessionFilter.accept() returns false

    [ https://issues.apache.org/jira/browse/FTPSERVER-476?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16642769#comment-16642769 ] 

Tuan edited comment on FTPSERVER-476 at 10/9/18 4:04 AM:
---------------------------------------------------------

The issue came from MinaSessionFilter. The session was closed immediately when filter return false.

When we have SessionFilter, At NioListener will add MinaSessionFilter to the last filterchain and when we did not accept (SessionFilter return false) the error occur.

I'm using version 1.1.0 and i did not know how can we fixed it. :)


was (Author: tuannn0107):
The 

> NullPointerException when SessionFilter.accept() returns false
> --------------------------------------------------------------
>
>                 Key: FTPSERVER-476
>                 URL: https://issues.apache.org/jira/browse/FTPSERVER-476
>             Project: FtpServer
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 1.1.0
>            Reporter: Manuel Dominguez Sarmiento
>            Priority: Major
>             Fix For: 1.1.1
>
>
> We have the following code for setting up listeners before starting the FTP server:
> 		ListenerFactory listenerFactory = new ListenerFactory();
> 		listenerFactory.setPort(controlPort);
> 		listenerFactory.setDataConnectionConfiguration(dataConnectionConfig);
> 		listenerFactory.setSessionFilter(new SessionFilter() {
> 			@Override
> 			public boolean accept(IoSession ioSession) {
> 				InetAddress address = ((InetSocketAddress) ioSession.getRemoteAddress()).getAddress();
> 				boolean accept = !enableIpSecurity || allowedIpAddresses.contains(address.getHostAddress());
> 				if (accept) {
> 					log.info("Login attempt from " + address.getHostAddress() + " successful");
> 				} else {
> 					log.warn("Login attempt from " + address.getHostAddress() + " failed");
> 				}
> 				return accept;
> 			}
> 		});
> 		Listener listener = listenerFactory.createListener();
> When SessionFilter.accept() returns false everything works fine from the user standpoint, however we get the following stack trace in the logs:
> [WARN ] 2016-11-02 10:35:39 [DefaultFtpHandler-pool-29-thread-1] - Data connection threw an exception on disconnect
> java.lang.NullPointerException
>         at org.apache.ftpserver.impl.IODataConnectionFactory.<init>(IODataConnectionFactory.java:80)
>         at org.apache.ftpserver.impl.FtpIoSession.getDataConnection(FtpIoSession.java:554)
>         at org.apache.ftpserver.impl.DefaultFtpHandler.sessionClosed(DefaultFtpHandler.java:106)
>         at org.apache.ftpserver.listener.nio.FtpHandlerAdapter.sessionClosed(FtpHandlerAdapter.java:72)
>         at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.sessionClosed(DefaultIoFilterChain.java:797)
>         at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextSessionClosed(DefaultIoFilterChain.java:504)
>         at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$900(DefaultIoFilterChain.java:48)
>         at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.sessionClosed(DefaultIoFilterChain.java:927)
>         at org.apache.mina.filter.logging.LoggingFilter.sessionClosed(LoggingFilter.java:238)
>         at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextSessionClosed(DefaultIoFilterChain.java:504)
>         at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$900(DefaultIoFilterChain.java:48)
>         at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.sessionClosed(DefaultIoFilterChain.java:927)
>         at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:109)
>         at org.apache.mina.filter.logging.MdcInjectionFilter.filter(MdcInjectionFilter.java:135)
>         at org.apache.mina.filter.util.CommonEventFilter.sessionClosed(CommonEventFilter.java:55)
>         at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextSessionClosed(DefaultIoFilterChain.java:504)
>         at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$900(DefaultIoFilterChain.java:48)
>         at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.sessionClosed(DefaultIoFilterChain.java:927)
>         at org.apache.mina.filter.codec.ProtocolCodecFilter.sessionClosed(ProtocolCodecFilter.java:360)
>         at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextSessionClosed(DefaultIoFilterChain.java:504)
>         at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$900(DefaultIoFilterChain.java:48)
>         at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.sessionClosed(DefaultIoFilterChain.java:927)
>         at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:109)
>         at org.apache.mina.core.session.IoEvent.run(IoEvent.java:63)
>         at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTask(OrderedThreadPoolExecutor.java:770)
>         at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTasks(OrderedThreadPoolExecutor.java:762)
>         at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.run(OrderedThreadPoolExecutor.java:704)
>         at java.lang.Thread.run(Thread.java:745)
> What seems to be happening is that the constructor for IODataConnectionFactory is expecting the session parameter to be non-null however since SessionFilter.accept() returns false, then this is not the case:
>     if (session.getListener().getDataConnectionConfiguration().isImplicitSsl()) {
>       secure = true;
>     }
> Thus we get a NullPointerException. This snippet should probably be changed to:
>     if (session != null && session.getListener().getDataConnectionConfiguration().isImplicitSsl()) {
>       secure = true;
>     }



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)