Source code: org/acegisecurity/providers/rcp/RemoteAuthenticationProvider.java
1 /* Copyright 2004 Acegi Technology Pty Limited
2 *
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 package org.acegisecurity.providers.rcp;
17
18 import org.acegisecurity.Authentication;
19 import org.acegisecurity.AuthenticationException;
20 import org.acegisecurity.GrantedAuthority;
21 import org.acegisecurity.providers.AuthenticationProvider;
22 import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;
23
24 import org.apache.commons.logging.Log;
25 import org.apache.commons.logging.LogFactory;
26
27 import org.springframework.beans.factory.InitializingBean;
28 import org.springframework.util.Assert;
29
30
31 /**
32 * Client-side object which queries a {@link RemoteAuthenticationManager} to
33 * validate an authentication request.
34 *
35 * <P>
36 * A new <code>Authentication</code> object is created by this class comprising
37 * the request <code>Authentication</code> object's <code>principal</code>,
38 * <code>credentials</code> and the <code>GrantedAuthority</code>[]s returned
39 * by the <code>RemoteAuthenticationManager</code>.
40 * </p>
41 *
42 * <P>
43 * The <code>RemoteAuthenticationManager</code> should not require any special
44 * username or password setting on the remoting client proxy factory to
45 * execute the call. Instead the entire authentication request must be
46 * encapsulated solely within the <code>Authentication</code> request object.
47 * In practical terms this means the <code>RemoteAuthenticationManager</code>
48 * will <B>not</B> be protected by BASIC or any other HTTP-level
49 * authentication.
50 * </p>
51 *
52 * <P>
53 * If authentication fails, a <code>RemoteAuthenticationException</code> will
54 * be thrown. This exception should be caught and displayed to the user,
55 * enabling them to retry with alternative credentials etc.
56 * </p>
57 *
58 * @author Ben Alex
59 * @version $Id: RemoteAuthenticationProvider.java,v 1.3 2005/11/17 00:55:51 benalex Exp $
60 */
61 public class RemoteAuthenticationProvider implements AuthenticationProvider,
62 InitializingBean {
63 //~ Static fields/initializers =============================================
64
65 private static final Log logger = LogFactory.getLog(RemoteAuthenticationProvider.class);
66
67 //~ Instance fields ========================================================
68
69 private RemoteAuthenticationManager remoteAuthenticationManager;
70
71 //~ Methods ================================================================
72
73 public void setRemoteAuthenticationManager(
74 RemoteAuthenticationManager remoteAuthenticationManager) {
75 this.remoteAuthenticationManager = remoteAuthenticationManager;
76 }
77
78 public RemoteAuthenticationManager getRemoteAuthenticationManager() {
79 return remoteAuthenticationManager;
80 }
81
82 public void afterPropertiesSet() throws Exception {
83 Assert.notNull(this.remoteAuthenticationManager, "remoteAuthenticationManager is mandatory");
84 }
85
86 public Authentication authenticate(Authentication authentication)
87 throws AuthenticationException {
88 String username = authentication.getPrincipal().toString();
89 String password = authentication.getCredentials().toString();
90 GrantedAuthority[] authorities = remoteAuthenticationManager
91 .attemptAuthentication(username, password);
92
93 return new UsernamePasswordAuthenticationToken(username, password,
94 authorities);
95 }
96
97 public boolean supports(Class authentication) {
98 return (UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication));
99 }
100 }