try to add the rampart security to my made
what I have made
1. I have stored in a database the hashed value of "bobPW" password and
the salt
In my PWCBHandler
* I get the stored password and hash
* I hash pwcb.getPassword() with the stord password
* check if this hashed password is equal to the stored password
Here is the code
public class PWCB implements CallbackHandler {
public static String strStoredPassword; public static String strStoredSalt;
public static String passwordforchecking; public static String[] newArray; /**
* @param args */ `public void handle(Callback[] callbacks) throws
IOException,` `UnsupportedCallbackException` { for (int i = 0; i <
callbacks.length; i++) { WSPasswordCallback pwcb =
(WSPasswordCallback)callbacks[i]; try { newArray = getdataforChecking(); }
catch (ClassNotFoundException e1) { // TODO Auto-generated catch block
e1.printStackTrace(); } try { passwordforchecking =
hash(pwcb.getPassword(),Base64.decodeBase64(newArray[1]));
System.out.println(passwordforchecking); } catch (Exception e) { // TODO
Auto-generated catch block e.printStackTrace(); }
if(pwcb.getIdentifier().equals("bob")||passwordforchecking.equals(newArray[0])
) { return; } }
}
private static String hash(String password, byte[] salt) throws Exception {
SecretKeyFactory f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 65536, 256); return
Base64.encodeBase64String(f.generateSecret(spec).getEncoded()); } public
String[] getdataforChecking() throws ClassNotFoundException { String arr[] =
new String[2]; Connection conn = null; Class.forName("org.postgresql.Driver");
try { conn = DriverManager.getConnection(
"jdbc:postgresql://localhost:5432/plovdivbizloca", "postgres", "tan"); } catch
(SQLException ex) { ex.printStackTrace(); } Statement mystmt = null; String
selectQuery = "SELECT password, salt from passwordforservice"; try { mystmt =
conn.createStatement(); ResultSet mysr = mystmt.executeQuery(selectQuery);
while (mysr.next()) { arr[0] = mysr.getString(1);//password
arr[1]=mysr.getString(2); //salt } } catch (Exception ex) {
ex.printStackTrace(); }
return arr;
}
}
but when I make this soap request with the correct pasword I get this
NullPointer exception which I can't explain why
NFO: Server startup in 9608 ms
java.lang.NullPointerException at kim.PWCB.hash(PWCB.java:68) at
kim.PWCB.handle(PWCB.java:44) at
org.apache.rampart.TokenCallbackHandler.handle(TokenCallbackHandler.java:98) at
org.apache.ws.security.validate.UsernameTokenValidator.verifyDigestPassword(UsernameTokenValidator.java:168)
at
org.apache.ws.security.validate.UsernameTokenValidator.verifyPlaintextPassword(UsernameTokenValidator.java:142)
at
org.apache.ws.security.validate.UsernameTokenValidator.validate(UsernameTokenValidator.java:100)
at
org.apache.ws.security.processor.UsernameTokenProcessor.handleUsernameToken(UsernameTokenProcessor.java:131)
at
org.apache.ws.security.processor.UsernameTokenProcessor.handleToken(UsernameTokenProcessor.java:65)
at
org.apache.ws.security.WSSecurityEngine.processSecurityHeader(WSSecurityEngine.java:396)
at
org.apache.ws.security.WSSecurityEngine.processSecurityHeader(WSSecurityEngine.java:304)
at
org.apache.ws.security.WSSecurityEngine.processSecurityHeader(WSSecurityEngine.java:249)
at org.apache.rampart.RampartEngine.process(RampartEngine.java:149) at
org.apache.rampart.handler.RampartReceiver.invoke(RampartReceiver.java:92) at
org.apache.axis2.engine.Phase.invokeHandler(Phase.java:340) at
org.apache.axis2.engine.Phase.invoke(Phase.java:313) at
org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:262) at
org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:168) at
org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:172)
at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:146) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:647) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947) at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at
java.lang.Thread.run(Unknown Source)
[ERROR] The security token could not be authenticated or authorized
org.apache.axis2.AxisFault: The security token could not be authenticated or
authorized at
org.apache.rampart.handler.RampartReceiver.setFaultCodeAndThrowAxisFault(RampartReceiver.java:180)
at org.apache.rampart.handler.RampartReceiver.invoke(RampartReceiver.java:95)
at org.apache.axis2.engine.Phase.invokeHandler(Phase.java:340) at
org.apache.axis2.engine.Phase.invoke(Phase.java:313) at
org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:262) at
org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:168) at
org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:172)
at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:146) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:647) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947) at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at
java.lang.Thread.run(Unknown Source)
Caused by: org.apache.ws.security.WSSecurityException: The security token could
not be authenticated or authorized at
org.apache.ws.security.validate.UsernameTokenValidator.verifyDigestPassword(UsernameTokenValidator.java:189)
at
org.apache.ws.security.validate.UsernameTokenValidator.verifyPlaintextPassword(UsernameTokenValidator.java:142)
at
org.apache.ws.security.validate.UsernameTokenValidator.validate(UsernameTokenValidator.java:100)
at
org.apache.ws.security.processor.UsernameTokenProcessor.handleUsernameToken(UsernameTokenProcessor.java:131)
at
org.apache.ws.security.processor.UsernameTokenProcessor.handleToken(UsernameTokenProcessor.java:65)
at
org.apache.ws.security.WSSecurityEngine.processSecurityHeader(WSSecurityEngine.java:396)
at
org.apache.ws.security.WSSecurityEngine.processSecurityHeader(WSSecurityEngine.java:304)
at
org.apache.ws.security.WSSecurityEngine.processSecurityHeader(WSSecurityEngine.java:249)
at
org.apache.rampart.RampartEngine.process(RampartEngine.java:149) at
org.apache.rampart.handler.RampartReceiver.invoke(RampartReceiver.java:92) ...
24 more
[WARN] Deprecated usage of OMElement#declareNamespace(String,String) with empty
prefix
add comment
question eligible for bounty in 2 days