/** * Copyright (C) 2011 Brian Ferris <bdferris@onebusaway.org> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.onebusaway.users.impl; import java.util.UUID; import org.onebusaway.users.impl.authentication.DefaultUserAuthenticationToken; import org.onebusaway.users.model.IndexedUserDetails; import org.onebusaway.users.model.UserIndexKey; import org.onebusaway.users.services.IndexedUserDetailsService; import org.onebusaway.users.services.UserIndexTypes; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.Authentication; import org.springframework.security.context.SecurityContextHolder; import org.springframework.security.ui.rememberme.TokenBasedRememberMeServices; public class AutoUserCurrentUserStrategyImpl extends CurrentUserStrategyImpl { private TokenBasedRememberMeServices _rememberMeServices; private IndexedUserDetailsService _userDetailsService; @Autowired public void setRememberMeServices( TokenBasedRememberMeServices rememberMeServices) { _rememberMeServices = rememberMeServices; } @Autowired public void setUserDetailsService(IndexedUserDetailsService userDetailsService) { _userDetailsService = userDetailsService; } @Override public IndexedUserDetails getCurrentUserDetails( boolean createUserIfAppropriate) { IndexedUserDetails details = super.getCurrentUserDetails(createUserIfAppropriate); if (details == null && createUserIfAppropriate) { Authentication authentication = createAuthentication(); details = getUserDetailsForAuthentication(authentication); SecurityContextHolder.getContext().setAuthentication(authentication); RequestAndResponseContext context = RequestAndResponseContext.getContext(); if (context != null) _rememberMeServices.onLoginSuccess(context.getRequest(), context.getResponse(), authentication); } return details; } protected Authentication createAuthentication() { UUID uuid = UUID.randomUUID(); UUID credentials = UUID.randomUUID(); UserIndexKey principal = new UserIndexKey(UserIndexTypes.WEB, uuid.toString()); IndexedUserDetails details = _userDetailsService.getOrCreateUserForIndexKey( principal, credentials.toString(), true); return new DefaultUserAuthenticationToken(details); } }