001 /*
002 * Copyright (c) 2002-2005 the original author or authors.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005 * use this file except in compliance with the License. You may obtain a copy of
006 * the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013 * License for the specific language governing permissions and limitations under
014 * the License.
015 */
016 package org.springframework.richclient.security;
017
018 import org.springframework.security.SpringSecurityException;
019 import org.springframework.security.Authentication;
020 import org.springframework.security.AuthenticationManager;
021
022 /**
023 * This interface defines the operations required of an Application Security Manager for
024 * the RCP framework. The security manager is responsible for handling login and logout
025 * requests, interacting with the {@link org.springframework.security.AuthenticationManager} that
026 * will perform the actual user authentication, and firing the events associated with
027 * application security lifecycle. See {@link ClientSecurityEvent} and its subclasses.
028 * <p>
029 * The Security Manager is available as an application service via
030 * {@link org.springframework.richclient.application.ApplicationServices#getSecurityManager}.
031 * <p>
032 * See {@link SecurityAwareConfigurer} for more details on how to configure components for
033 * automatic notification of security events.
034 *
035 * @author Larry Streepy
036 * @see org.springframework.richclient.security.support.DefaultApplicationSecurityManager
037 * @see AuthenticationAware
038 * @see LoginAware
039 * @see SecurityAwareConfigurer
040 *
041 */
042 public interface ApplicationSecurityManager {
043
044 /**
045 * Process a login attempt and fire all related events. If the authentication fails,
046 * then a {@link AuthenticationFailedEvent} is published and the exception is
047 * rethrown. If the authentication succeeds, then an {@link AuthenticationEvent} is
048 * published, followed by a {@link LoginEvent}.
049 *
050 * @param authentication token to use for the login attempt
051 * @return Authentication token resulting from a successful call to
052 * {@link AuthenticationManager#authenticate(org.springframework.security.Authentication)}.
053 * @throws SpringSecurityException If the authentication attempt fails
054 */
055 public Authentication doLogin(Authentication authentication) throws SpringSecurityException;
056
057 /**
058 * Return if a user is currently logged in, meaning that a previous call to doLogin
059 * resulted in a valid authentication request.
060 * @return true if a user is logged in
061 */
062 public boolean isUserLoggedIn();
063
064 /**
065 * Get the authentication token for the currently logged in user.
066 * @return authentication token, null if not logged in
067 */
068 public Authentication getAuthentication();
069
070 /**
071 * Determine if the currently authenticated user has the role provided.
072 * @param role to check
073 * @return true if the user has the role requested
074 */
075 public boolean isUserInRole(String role);
076
077 /**
078 * Perform a logout. Set the current authentication token to null (in both the
079 * per-thread security context and the global context), then publish an
080 * {@link AuthenticationEvent} followed by a {@link LogoutEvent}.
081 * @return Authentication token that was in place prior to the logout.
082 */
083 public Authentication doLogout();
084
085 /**
086 * Set the authentication manager to use.
087 * @param authenticationManager instance to use for authentication requests
088 */
089 public void setAuthenticationManager(AuthenticationManager authenticationManager);
090
091 /**
092 * Get the authentication manager in use.
093 * @return authenticationManager instance used for authentication requests
094 */
095 public AuthenticationManager getAuthenticationManager();
096 }