View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd.
4   //  ------------------------------------------------------------------------
5   //  All rights reserved. This program and the accompanying materials
6   //  are made available under the terms of the Eclipse Public License v1.0
7   //  and Apache License v2.0 which accompanies this distribution.
8   //
9   //      The Eclipse Public License is available at
10  //      http://www.eclipse.org/legal/epl-v10.html
11  //
12  //      The Apache License v2.0 is available at
13  //      http://www.opensource.org/licenses/apache2.0.php
14  //
15  //  You may elect to redistribute this code under either of these licenses.
16  //  ========================================================================
17  //
18  
19  package org.eclipse.jetty.jaas.callback;
20  
21  import java.io.IOException;
22  import java.util.Arrays;
23  
24  import javax.security.auth.callback.Callback;
25  import javax.security.auth.callback.NameCallback;
26  import javax.security.auth.callback.PasswordCallback;
27  import javax.security.auth.callback.UnsupportedCallbackException;
28  
29  import org.eclipse.jetty.server.Request;
30  import org.eclipse.jetty.util.security.Password;
31  
32  /** 
33   * DefaultUsernameCredentialCallbackHandler
34   */
35  public class DefaultCallbackHandler extends AbstractCallbackHandler
36  {
37      private Request _request;
38  
39      public void setRequest (Request request)
40      {
41          this._request = request;
42      }
43  
44      public void handle (Callback[] callbacks)
45          throws IOException, UnsupportedCallbackException
46      {
47          for (int i=0; i < callbacks.length; i++)
48          {
49              if (callbacks[i] instanceof NameCallback)
50              {
51                  ((NameCallback)callbacks[i]).setName(getUserName());
52              }
53              else if (callbacks[i] instanceof ObjectCallback)
54              {
55                  ((ObjectCallback)callbacks[i]).setObject(getCredential());
56              }
57              else if (callbacks[i] instanceof PasswordCallback)
58              {
59                  if (getCredential() instanceof Password)
60                      ((PasswordCallback)callbacks[i]).setPassword (((Password)getCredential()).toString().toCharArray());
61                  else if (getCredential() instanceof String)
62                  {
63                      ((PasswordCallback)callbacks[i]).setPassword (((String)getCredential()).toCharArray());
64                  }
65                  else
66                      throw new UnsupportedCallbackException (callbacks[i], "User supplied credentials cannot be converted to char[] for PasswordCallback: try using an ObjectCallback instead");
67              }
68              else if (callbacks[i] instanceof RequestParameterCallback)
69              {
70                  RequestParameterCallback callback = (RequestParameterCallback)callbacks[i];
71                  callback.setParameterValues(Arrays.asList(_request.getParameterValues(callback.getParameterName())));
72              }
73              else
74                  throw new UnsupportedCallbackException(callbacks[i]);
75          }
76  
77      }
78  
79  }
80