Sample Code 2
The following sample code demonstrates the custom authentication of users using user name and password contained in a flat file. You must initialize user and password lists in the class constructor to make custom authentication work.
package com.hyperion.css.security;
import java.util.Map;
import java.util.HashMap;
import com.hyperion.css.CSSCustomAuthenticationIF;
import java.io.*;
public class CSSCustomAuthenticationImpl implements CSSCustomAuthenticationIF{
static final String DATA_FILE = "datafile.txt";
/**
* authenticate method includes the core implementation of the
* Custom Authentication Mechanism. If custom authentication is
* enabled for the provider, authentication operations
* are delegated to this method. Upon successful authentication,
* this method returns a valid user name, using which EPM System
* retrieves the user from a custom authentication enabled provider.
* User name can be returned in the format username@providerName,
* where providerName indicates the name of the underlying provider
* where the user is available. authenticate method can use other
* private methods to access various core components of the
* custom authentication module.
* @param context
* @param userName
* @param password
* @return
* @throws Exception
*/
Map users = null;
public CSSCustomAuthenticationImpl(){
users = new HashMap();
InputStream is = null;
BufferedReader br = null;
String line;
String[] userDetails = null;
String userKey = null;
try{
is = CSSCustomAuthenticationImpl.class.getResourceAsStream(DATA_FILE);
br = new BufferedReader(new InputStreamReader(is));
while(null != (line = br.readLine())){
userDetails = line.split(":");
if(userDetails != null && userDetails.length==3){
userKey = userDetails[0]+ ":" + userDetails[1];
users.put(userKey, userDetails[2]);
}
}
}
catch(Exception e){
// log a message
}
finally{
try{
if(br != null) br.close();
if(is != null) is.close();
}
catch(IOException ioe){
ioe.printStackTrace();
}
}
}
/* Use this authenticate method snippet to return username from a flat file */
public String authenticate(Map context, String userName, String password) throws Exception{
//userName : user input for the userName
//password : user input for password
//context : Map, can be used to additional information required by
// the custom authentication module.
String authenticatedUserKey = userName + ":" + password;
if(users.get(authenticatedUserKey)!=null)
return(String)users.get(authenticatedUserKey);
else throw new Exception("Invalid User Credentials");
}
/* Refer to this authenticate method snippet to return username in
username@providername format */
public String authenticate(Map context, String userName, String password) throws Exception{
//userName : user input for userName
//password : user input for password
//context : Map can be used to additional information required by
// the custom authentication module.
//Your code should uniquely identify the user in a custom provider and in a configured
//user directory in Shared Services. EPM Security expects you to append the provider
//name to the user name. Provider name must be identical to the name of a custom
//authentication-enabled user directory specified in Shared Services.
//If invalid arguments, return null or throw exception with appropriate message
//set authenticationSuccessFlag = false
String authenticatedUserKey = userName + ":" + password;
if(users.get(authenticatedUserKey)!=null)
String userNameStr = (new StringBuffer())
.append((String)users.get(authenticatedUserKey))
.append("@").append(PROVIDER_NAME).toString();
return userNameStr;
else throw new Exception("Invalid User Credentials");
}
}