Java 如何允许匿名登录org.apache.ftpserver?
我编写了一段类似这样的代码来启动嵌入到我的应用程序中的ftp服务器。这是基于 我发现匿名用户无法登录。客户得到530 我是否已为ftp添加配置文件?我找不到任何API来创建要添加到UserManger的用户Java 如何允许匿名登录org.apache.ftpserver?,java,ftp,Java,Ftp,我编写了一段类似这样的代码来启动嵌入到我的应用程序中的ftp服务器。这是基于 我发现匿名用户无法登录。客户得到530 我是否已为ftp添加配置文件?我找不到任何API来创建要添加到UserManger的用户 private void start_ftp() throws FtpException { FtpServerFactory serverFactory = new FtpServerFactory(); ListenerFactory factory = new Lis
private void start_ftp() throws FtpException {
FtpServerFactory serverFactory = new FtpServerFactory();
ListenerFactory factory = new ListenerFactory();
// set the port of the listener
factory.setPort(DEF_FTP_PORT);
// replace the default listener
serverFactory.addListener("default", factory.createListener());
Ftplet fl = new MyFtplet();
Map<String, Ftplet> map_ftplest = new LinkedHashMap<String, Ftplet>();
map_ftplest.put("default", fl);
serverFactory.setFtplets(map_ftplest);
UserManagerFactory u_factory = new PropertiesUserManagerFactory();
UserManager u_manager = u_factory.createUserManager();
//u_manager.
Boolean b = u_manager.doesExist("anonymous");
serverFactory.setUserManager(u_manager);
// start the server
server = serverFactory.createServer();
server.start();
}
private void start_ftp()引发FtpException{
FtpServerFactory serverFactory=新的FtpServerFactory();
ListenerFactory=新建ListenerFactory();
//设置侦听器的端口
出厂设置端口(DEF_FTP_端口);
//替换默认侦听器
serverFactory.addListener(“默认”,factory.createListener());
Ftplet fl=新的MyFtplet();
Map Map_ftplest=新建LinkedHashMap();
地图(默认值,fl);
serverFactory.setFtplets(映射文件);
UserManagerFactory u_factory=新属性UserManagerFactory();
UserManager u_manager=u_工厂。createUserManager();
//你的经理。
布尔b=u_经理。性别歧视(“匿名”);
setUserManager(u_管理器);
//启动服务器
server=serverFactory.createServer();
server.start();
}
尝试在服务器配置中设置anon enabled=“true”
。要通过Apache FtpServer实现匿名登录,必须启用匿名身份验证,然后将“匿名”用户添加到UserManager
以下是设置匿名身份验证的代码段:
FtpServerFactory serverFactory = new FtpServerFactory();
ConnectionConfigFactory connectionConfigFactory = new ConnectionConfigFactory();
connectionConfigFactory.setAnonymousLoginEnabled(false);
serverFactory.setConnectionConfig(connectionConfigFactory.createConnectionConfig());
serverFactory.setUserManager(new TestUserManagerFactory().createUserManager());
startFtpServer(serverFactory);
然后,您可以提供一个UserManager来验证和授权登录。以下是自定义UserManagerFactory和AbstractUserManager:
private class TestUserManagerFactory implements UserManagerFactory {
@Override
public UserManager createUserManager() {
return new TestUserManager("admin", new ClearTextPasswordEncryptor());
}
}
private class TestUserManager extends AbstractUserManager {
private BaseUser testUser;
private BaseUser anonUser;
public TestUserManager(String adminName, PasswordEncryptor passwordEncryptor) {
super(adminName, passwordEncryptor);
testUser = new BaseUser();
testUser.setAuthorities(Arrays.asList(new Authority[] {new ConcurrentLoginPermission(1, 1)}));
testUser.setEnabled(true);
testUser.setHomeDirectory(TEST_USER_FTP_ROOT);
testUser.setMaxIdleTime(10000);
testUser.setName(TEST_USERNAME);
testUser.setPassword(TEST_PASSWORD);
anonUser = new BaseUser(testUser);
anonUser.setName("anonymous");
}
@Override
public User getUserByName(String username) throws FtpException {
if(TEST_USERNAME.equals(username)) {
return testUser;
} else if(anonUser.getName().equals(username)) {
return anonUser;
}
return null;
}
@Override
public String[] getAllUserNames() throws FtpException {
return new String[] {TEST_USERNAME, anonUser.getName()};
}
@Override
public void delete(String username) throws FtpException {
//no opt
}
@Override
public void save(User user) throws FtpException {
//no opt
System.out.println("save");
}
@Override
public boolean doesExist(String username) throws FtpException {
return (TEST_USERNAME.equals(username) || anonUser.getName().equals(username)) ? true : false;
}
@Override
public User authenticate(Authentication authentication) throws AuthenticationFailedException {
if(UsernamePasswordAuthentication.class.isAssignableFrom(authentication.getClass())) {
UsernamePasswordAuthentication upAuth = (UsernamePasswordAuthentication) authentication;
if(TEST_USERNAME.equals(upAuth.getUsername()) && TEST_PASSWORD.equals(upAuth.getPassword())) {
return testUser;
}
if(anonUser.getName().equals(upAuth.getUsername())) {
return anonUser;
}
} else if(AnonymousAuthentication.class.isAssignableFrom(authentication.getClass())) {
return anonUser;
}
return null;
}
}
真正重要的是用户的回归
HTH不需要自己的用户管理器。试试这个:
FtpServerFactory serverFactory = new FtpServerFactory();
ConnectionConfigFactory connectionConfigFactory = new ConnectionConfigFactory();
connectionConfigFactory.setAnonymousLoginEnabled(true);
serverFactory.setConnectionConfig(connectionConfigFactory.createConnectionConfig());
BaseUser user = new BaseUser();
user.setName("anonymous");
serverFactory.getUserManager().save(user);
startFtpServer(serverFactory);
这意味着我必须添加一个配置文件,我认为这不是一个好主意。@abl那么你的问题是,在没有配置文件的情况下,如何通过编程实现这一点?