Доступ к серверу oam, размещенному в https, из клиентской программы java
Привет у меня есть требование для доступа к серверу oam, который размещен в протоколе https. Я получил сертификат и файлы obaccess.xml от сервера для доступа. Но все еще сталкиваюсь с некоторыми проблемами. Ниже мой код
import java.util.Hashtable;
import oracle.security.am.asdk.*;
public class JAccessClient
{
public static final String ms_resource ="//1.1.1.1:14101/rest/userprofile";
public static final String ms_protocol = "https";
public static final String ms_method = "GET";
public static final String ms_login = "admin";
public static final String ms_passwd = "admin";
public static final String m_configLocation = "D:\\Configfiles";
public static void main(String argv[])
{
AccessClient ac = null;
try
{
System.out.println("Entered Try..");
ac = AccessClient.createDefaultInstance(m_configLocation,AccessClient.CompatibilityMode.OAM_10G);
System.out.println("Created Default Instance..");
ResourceRequest rrq = new ResourceRequest(ms_protocol, ms_resource,ms_method);
System.out.println("Created Resource Request object..");
if (rrq.isProtected())
{
System.out.println("Resource is protected.");
AuthenticationScheme authnScheme = new AuthenticationScheme(rrq);
if (authnScheme.isForm())
{
System.out.println("Form Authentication Scheme.");
Hashtable creds = new Hashtable();
creds.put("userid", ms_login);
creds.put("password", ms_passwd);
UserSession session = new UserSession(rrq, creds);
if (session.getStatus() == UserSession.LOGGEDIN)
{
if (session.isAuthorized(rrq))
{
System.out.println("User is logged in and authorized for the"+"request at level " + session.getLevel());
System.out.println("User Identity:"+session.getUserIdentity());
System.out.println("Status: "+session.getStatus());
System.out.println("Start time:"+session.getStartTime());
System.out.println("Session Token:"+session.getSessionToken());
System.out.println("Last Usetime:"+session.getLastUseTime());
}
else
{
System.out.println("User is logged in but NOT authorized");
}
//user can be loggedout by calling logoff method on the session object
}
else
{
System.out.println("User is NOT logged in");
}
}
else
{
System.out.println("non-Form Authentication Scheme.");
}
}
else
{
System.out.println("Resource is NOT protected.");
}
}
catch (AccessException ae)
{
//System.out.println("Access Exception: " + ae.getCause());
ae.getStackTrace();
}
ac.shutdown();
} } Я поместил obaccess.xml и cwallet.sso в путь D://ConfigFiles. Когда я запускаю приведенный выше код, я получаю ошибку, как показано ниже
Entered Try..
Jul 05, 2013 9:04:49 AM oracle.security.am.asdk.impl.Configuration setEncryptedPassword
SEVERE: Failed to perform encrypt password operation.
Jul 05, 2013 9:04:49 AM oracle.security.am.asdk.impl.Configuration setEncryptedPassword
SEVERE:
java.lang.NumberFormatException: For input string: "9a"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at oracle.security.am.common.nap.util.ObCrypt.convert(ObCrypt.java:163)
at oracle.security.am.common.nap.util.ObCrypt.decrypt(ObCrypt.java:100)
at oracle.security.am.common.nap.util.ObCrypt.decrypt(ObCrypt.java:214)
at oracle.security.am.asdk.impl.Configuration.decrypt(Configuration.java:810)
at oracle.security.am.asdk.impl.Configuration.decryptPassword(Configuration.java:766)
at oracle.security.am.asdk.impl.Configuration.setEncryptedPassword(Configuration.java:242)
at oracle.security.am.asdk.impl.ConfigXMLHandler.processConfig(ConfigXMLHandler.java:570)
at oracle.security.am.asdk.impl.ConfigXMLHandler.readConfigurationFromFile(ConfigXMLHandler.java:124)
at oracle.security.am.asdk.AccessClient.initialize(AccessClient.java:608)
at oracle.security.am.asdk.AccessClient.<init>(AccessClient.java:527)
at oracle.security.am.asdk.AccessClient.createDefaultInstance(AccessClient.java:234)
at JAccessClient.main(JAccessClient.java:21)
Jul 05, 2013 9:04:49 AM oracle.security.am.asdk.AccessClient initialize
SEVERE: Oracle Access SDK initialization failed.
oracle.security.am.asdk.AccessException: OAMAGENT-02072: Failed to perform encrypt password operation.
at oracle.security.am.asdk.impl.Configuration.setEncryptedPassword(Configuration.java:263)
at oracle.security.am.asdk.impl.ConfigXMLHandler.processConfig(ConfigXMLHandler.java:570)
at oracle.security.am.asdk.impl.ConfigXMLHandler.readConfigurationFromFile(ConfigXMLHandler.java:124)
at oracle.security.am.asdk.AccessClient.initialize(AccessClient.java:608)
at oracle.security.am.asdk.AccessClient.<init>(AccessClient.java:527)
at oracle.security.am.asdk.AccessClient.createDefaultInstance(AccessClient.java:234)
at JAccessClient.main(JAccessClient.java:21)
Caused by: java.lang.NumberFormatException: For input string: "9a"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at oracle.security.am.common.nap.util.ObCrypt.convert(ObCrypt.java:163)
at oracle.security.am.common.nap.util.ObCrypt.decrypt(ObCrypt.java:100)
at oracle.security.am.common.nap.util.ObCrypt.decrypt(ObCrypt.java:214)
at oracle.security.am.asdk.impl.Configuration.decrypt(Configuration.java:810)
at oracle.security.am.asdk.impl.Configuration.decryptPassword(Configuration.java:766)
at oracle.security.am.asdk.impl.Configuration.setEncryptedPassword(Configuration.java:242)
... 6 more
Exception in thread "main" java.lang.NullPointerException
at JAccessClient.main(JAccessClient.java:75)
Я новичок в OAM, и вот где я застрял. Любая помощь по этому вопросу будет действительно полезна.
1 ответ
Вы получаете эту ошибку, потому что вы не создали экземпляр AMClient. OAM SDK требует, чтобы вы создали экземпляр AMCLient, прежде чем делать что-либо еще с SDK, например, начинать новый сеанс.