/*
* Copyright 2009 SIB Visions GmbH
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*
*
* History
*
* 28.09.2009 - [JR] - creation
*/
package apps.firstapp.security;
import java.util.Hashtable;
import jvx.rad.remote.IConnectionConstants;
import jvx.rad.server.ISession;
import com.sibvisions.rad.server.security.ISecurityManager;
/**
* The HashtableSecurityManager
is a {@link Hashtable}
* based {@link ISecurityManager} implementation.
*
* @author René Jahn
*/
public class HashtableSecurityManager implements ISecurityManager
{
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class members
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/** contains username/password mapping. */
private Hashtable htUsers = new Hashtable();
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Initialization
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/**
* Creates a new instance of HashtableSecurityManager
with
* predefined users.
*/
public HashtableSecurityManager()
{
htUsers.put("username", "password");
htUsers.put("jvx", "jvx");
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Interface implementation
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/**
* {@inheritDoc}
*/
public synchronized void validateAuthentication(ISession pSession)
{
checkUser(pSession);
}
/**
* {@inheritDoc}
*/
public synchronized void changePassword(ISession pSession)
{
checkUser(pSession);
//check old password with current password!
if (!htUsers.get(pSession.getUserName()).equals(
pSession.getProperty(IConnectionConstants.OLDPASSWORD)))
{
throw new SecurityException("Invalid password");
}
//user is valid -> change the password
htUsers.put(pSession.getUserName(),
(String)pSession.getProperty(IConnectionConstants.NEWPASSWORD));
}
/**
* {@inheritDoc}
*/
public synchronized void logout(ISession pSession)
{
}
/**
* {@inheritDoc}
*/
public synchronized IAccessController getAccessController(ISession pSession)
{
return null;
}
/**
* {@inheritDoc}
*/
public synchronized void release()
{
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// User-defined methods
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/**
* Checks if the user is known and the password is valid.
*
* @param pSession the session to authenticate
*/
private void checkUser(ISession pSession)
{
String sPwd = htUsers.get(pSession.getUserName());
if (sPwd == null)
{
throw new SecurityException("User not found!");
}
if (!sPwd.equals(pSession.getPassword()))
{
throw new SecurityException("Invalid password");
}
}
} // HashtableSecurityManager