diff --git a/scm-plugin-backend/pom.xml b/scm-plugin-backend/pom.xml index cc0ab9e5a2..937c4c7de9 100644 --- a/scm-plugin-backend/pom.xml +++ b/scm-plugin-backend/pom.xml @@ -102,6 +102,12 @@ shiro-guice ${shiro.version} + + + org.apache.shiro + shiro-ehcache + ${shiro.version} + diff --git a/scm-plugin-backend/src/main/java/sonia/scm/plugin/security/CacheManagerProvider.java b/scm-plugin-backend/src/main/java/sonia/scm/plugin/security/CacheManagerProvider.java new file mode 100644 index 0000000000..02f77eeaff --- /dev/null +++ b/scm-plugin-backend/src/main/java/sonia/scm/plugin/security/CacheManagerProvider.java @@ -0,0 +1,85 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. 2. Redistributions in + * binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. 3. Neither the name of SCM-Manager; + * nor the names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.plugin.security; + +//~--- non-JDK imports -------------------------------------------------------- + +import com.google.inject.Inject; +import com.google.inject.Provider; +import com.google.inject.Singleton; + +import org.apache.shiro.cache.CacheManager; +import org.apache.shiro.cache.ehcache.EhCacheManager; + +/** + * + * @author Sebastian Sdorra + */ +@Singleton +public class CacheManagerProvider implements Provider +{ + + /** + * Constructs ... + * + * + * @param cacheManager + */ + @Inject + public CacheManagerProvider(net.sf.ehcache.CacheManager cacheManager) + { + this.cacheManager = cacheManager; + } + + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @return + */ + @Override + public CacheManager get() + { + EhCacheManager eh = new EhCacheManager(); + + eh.setCacheManager(cacheManager); + + return eh; + } + + //~--- fields --------------------------------------------------------------- + + /** Field description */ + private net.sf.ehcache.CacheManager cacheManager; +} diff --git a/scm-plugin-backend/src/main/java/sonia/scm/plugin/security/DefaultAdminRealm.java b/scm-plugin-backend/src/main/java/sonia/scm/plugin/security/DefaultAdminRealm.java index 2d2f7e8fb7..36d2c03230 100644 --- a/scm-plugin-backend/src/main/java/sonia/scm/plugin/security/DefaultAdminRealm.java +++ b/scm-plugin-backend/src/main/java/sonia/scm/plugin/security/DefaultAdminRealm.java @@ -45,6 +45,7 @@ import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.authc.credential.CredentialsMatcher; import org.apache.shiro.authz.AuthorizationInfo; import org.apache.shiro.authz.SimpleAuthorizationInfo; +import org.apache.shiro.cache.CacheManager; import org.apache.shiro.realm.AuthorizingRealm; import org.apache.shiro.subject.PrincipalCollection; @@ -79,12 +80,13 @@ public class DefaultAdminRealm extends AuthorizingRealm * * @param configuration * @param credentialsMatcher + * @param cacheManager */ @Inject public DefaultAdminRealm(BackendConfiguration configuration, - CredentialsMatcher credentialsMatcher) + CredentialsMatcher credentialsMatcher, CacheManager cacheManager) { - super(credentialsMatcher); + super(cacheManager, credentialsMatcher); this.configuration = configuration; setAuthenticationTokenClass(UsernamePasswordToken.class); } diff --git a/scm-plugin-backend/src/main/java/sonia/scm/plugin/security/SecurityModule.java b/scm-plugin-backend/src/main/java/sonia/scm/plugin/security/SecurityModule.java index de32606898..c5a432b9a5 100644 --- a/scm-plugin-backend/src/main/java/sonia/scm/plugin/security/SecurityModule.java +++ b/scm-plugin-backend/src/main/java/sonia/scm/plugin/security/SecurityModule.java @@ -38,6 +38,7 @@ import com.google.inject.name.Names; import org.apache.shiro.authc.credential.CredentialsMatcher; import org.apache.shiro.authc.credential.HashedCredentialsMatcher; +import org.apache.shiro.cache.CacheManager; import org.apache.shiro.crypto.RandomNumberGenerator; import org.apache.shiro.crypto.SecureRandomNumberGenerator; import org.apache.shiro.crypto.hash.SimpleHash; @@ -158,6 +159,9 @@ public class SecurityModule extends ShiroWebModule bindConstants(); bindCredentialsMatcher(); + // bind cache manager + bind(CacheManager.class).toProvider(CacheManagerProvider.class); + // bind realm bindRealm().to(DefaultAdminRealm.class); diff --git a/scm-plugin-backend/src/main/resources/config/ehcache.xml b/scm-plugin-backend/src/main/resources/config/ehcache.xml index 5596a25dc8..f49ba87106 100644 --- a/scm-plugin-backend/src/main/resources/config/ehcache.xml +++ b/scm-plugin-backend/src/main/resources/config/ehcache.xml @@ -116,5 +116,31 @@ timeToLiveSeconds="3600" diskPersistent="false" /> + + + + + + + diff --git a/scm-plugin-backend/src/main/webapp/WEB-INF/ftl/admin/index.html b/scm-plugin-backend/src/main/webapp/WEB-INF/ftl/admin/index.html index 9ba191266f..2a4300d4f1 100644 --- a/scm-plugin-backend/src/main/webapp/WEB-INF/ftl/admin/index.html +++ b/scm-plugin-backend/src/main/webapp/WEB-INF/ftl/admin/index.html @@ -1,5 +1,5 @@ <#include "../template/header.html"> -

Admin

+

Admin (${subject.name})

<#include "../template/footer.html"> \ No newline at end of file