001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing,
013 * software distributed under the License is distributed on an
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 * KIND, either express or implied. See the License for the
016 * specific language governing permissions and limitations
017 * under the License.
018 */
019 package org.tynamo.shiro.extension.realm.text;
020
021 import org.apache.shiro.authc.*;
022 import org.apache.shiro.cache.CacheManager;
023 import org.apache.shiro.realm.text.PropertiesRealm;
024
025 /**
026 * Fixes some bugs with {@link org.apache.shiro.realm.text.PropertiesRealm}
027 *
028 */
029 public class ExtendedPropertiesRealm extends PropertiesRealm
030 {
031
032 boolean created;
033
034 public ExtendedPropertiesRealm(String resourcePath)
035 {
036 super();
037 setResourcePath(resourcePath);
038 onInit();
039 }
040
041 /**
042 * Eliminates the error generating NullPointerException,
043 * when trying to register for non-existent account.
044 * <p/>
045 *
046 * @see org.apache.shiro.realm.SimpleAccountRealm#doGetAuthenticationInfo(org.apache.shiro.authc.AuthenticationToken)
047 */
048 @Override
049 protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException
050 {
051
052 UsernamePasswordToken upToken = (UsernamePasswordToken) token;
053 if (!accountExists(upToken.getUsername()))
054 {
055 throw new UnknownAccountException("Unknown account" + upToken.getUsername());
056 }
057
058 return super.doGetAuthenticationInfo(token);
059 }
060
061 @Override
062 public void setCacheManager(CacheManager authzInfoCacheManager)
063 {
064 if (created && getCacheManager() != null)
065 {
066 return;
067 }
068 super.setCacheManager(authzInfoCacheManager);
069 }
070
071
072 /**
073 * Remove initialization after installing cacheManager.
074 * This created problems of premature initialization,
075 * when not specified the name of realm, respectively,
076 * are generated nekkorektnye account with the name of the default realm,
077 * which then changed to the name specified in the config.
078 *
079 * @see org.apache.shiro.realm.AuthorizingRealm#afterCacheManagerSet()
080 */
081 @Override
082 protected void afterCacheManagerSet()
083 {
084 if (created)
085 {
086 super.afterCacheManagerSet();
087 } else
088 {
089 setAuthorizationCache(null);
090 }
091 }
092 }