View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2012 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  import javax.security.auth.callback.Callback;
24  import javax.security.auth.callback.NameCallback;
25  import javax.security.auth.callback.PasswordCallback;
26  import javax.security.auth.callback.UnsupportedCallbackException;
27  
28  import org.eclipse.jetty.server.Request;
29  import org.eclipse.jetty.util.security.Password;
30  
31  
32  
33  /* ---------------------------------------------------- */
34  /** DefaultUsernameCredentialCallbackHandler
35   * <p>
36   *
37   * <p><h4>Notes</h4>
38   * <p>
39   *
40   * <p><h4>Usage</h4>
41   * <pre>
42   */
43  /*
44   * </pre>
45   *
46   * @see
47   * @version 1.0 Tue Apr 15 2003
48   *
49   */
50  public class DefaultCallbackHandler extends AbstractCallbackHandler
51  {
52  
53      private Request _request;
54  
55      public void setRequest (Request request)
56      {
57          this._request = request;
58      }
59  
60      public void handle (Callback[] callbacks)
61          throws IOException, UnsupportedCallbackException
62      {
63          for (int i=0; i < callbacks.length; i++)
64          {
65              if (callbacks[i] instanceof NameCallback)
66              {
67                  ((NameCallback)callbacks[i]).setName(getUserName());
68              }
69              else if (callbacks[i] instanceof ObjectCallback)
70              {
71                  ((ObjectCallback)callbacks[i]).setObject(getCredential());
72              }
73              else if (callbacks[i] instanceof PasswordCallback)
74              {
75                  if (getCredential() instanceof Password)
76                      ((PasswordCallback)callbacks[i]).setPassword (((Password)getCredential()).toString().toCharArray());
77                  else if (getCredential() instanceof String)
78                  {
79                      ((PasswordCallback)callbacks[i]).setPassword (((String)getCredential()).toCharArray());
80                  }
81                  else
82                      throw new UnsupportedCallbackException (callbacks[i], "User supplied credentials cannot be converted to char[] for PasswordCallback: try using an ObjectCallback instead");
83              }
84              else if (callbacks[i] instanceof RequestParameterCallback)
85              {
86                  RequestParameterCallback callback = (RequestParameterCallback)callbacks[i];
87                  callback.setParameterValues(Arrays.asList(_request.getParameterValues(callback.getParameterName())));
88              }
89              else
90                  throw new UnsupportedCallbackException(callbacks[i]);
91          }
92  
93      }
94  
95  }
96