Author: snoopdave
Date: Thu Jul 26 09:55:31 2007
New Revision: 559881
URL: http://svn.apache.org/viewvc?view=rev&rev=559881
Log:
Fix for ROL-1492 "Change users profile and admin permissions feature does not
work"
Better fix: after user is updated, clear the user from the Acegi cache. This is
done by RollerContext so we can isolate the Acegi dependency in one class.
Also fixed a couple of missing I18N strings.
Modified:
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/RollerContext.java
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/admin/ModifyUser.java
roller/trunk/apps/weblogger/web/WEB-INF/classes/ApplicationResources.properties
roller/trunk/apps/weblogger/web/WEB-INF/security.xml
Modified:
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/RollerContext.java
URL:
http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/RollerContext.java?view=diff&rev=559881&r1=559880&r2=559881
==============================================================================
---
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/RollerContext.java
(original)
+++
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/RollerContext.java
Thu Jul 26 09:55:31 2007
@@ -26,6 +26,7 @@
import javax.servlet.ServletContextListener;
import org.acegisecurity.providers.ProviderManager;
import org.acegisecurity.providers.dao.DaoAuthenticationProvider;
+import org.acegisecurity.providers.dao.UserCache;
import org.acegisecurity.providers.encoding.Md5PasswordEncoder;
import org.acegisecurity.providers.encoding.PasswordEncoder;
import org.acegisecurity.providers.encoding.ShaPasswordEncoder;
@@ -43,6 +44,7 @@
import org.apache.roller.planet.business.PlanetProvider;
import org.apache.roller.planet.business.startup.PlanetStartup;
import org.apache.roller.weblogger.business.startup.WebloggerStartup;
+import org.apache.roller.weblogger.pojos.User;
import org.apache.roller.weblogger.ui.core.plugins.UIPluginManager;
import org.apache.roller.weblogger.ui.core.plugins.UIPluginManagerImpl;
import org.apache.roller.weblogger.ui.core.security.AutoProvision;
@@ -62,7 +64,7 @@
private static Log log = LogFactory.getLog(RollerContext.class);
private static ServletContext servletContext = null;
-
+
public RollerContext() {
super();
@@ -70,6 +72,25 @@
/**
+ * Access to the plugin manager for the UI layer. TODO: we may want
+ * something similar to the Roller interface for the UI layer if we dont
+ * want methods like this here in RollerContext.
+ */
+ public static UIPluginManager getUIPluginManager() {
+ return UIPluginManagerImpl.getInstance();
+ }
+
+
+ /**
+ * Get the ServletContext.
+ * @return ServletContext
+ */
+ public static ServletContext getServletContext() {
+ return servletContext;
+ }
+
+
+ /**
* Responds to app-init event and triggers startup procedures.
*/
public void contextInitialized(ServletContextEvent sce) {
@@ -313,15 +334,20 @@
*/
}
+
/**
- * Get the ServletContext.
- * @return ServletContext
+ * Flush user from any caches maintained by security system.
*/
- public static ServletContext getServletContext() {
- return servletContext;
+ public static void flushAuthenticationUserCache(String userName) {
+ ApplicationContext ctx =
+
WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
+ UserCache userCache = (UserCache)ctx.getBean("userCache");
+ if (userCache != null) {
+ userCache.removeUserFromCache(userName);
+ }
}
+
-
/**
* Get an instance of AutoProvision, if available in roller.properties
* @return AutoProvision
@@ -358,15 +384,5 @@
}
}
return null;
- }
-
-
- /**
- * Access to the plugin manager for the UI layer. TODO: we may want
- * something similar to the Roller interface for the UI layer if we dont
- * want methods like this here in RollerContext.
- */
- public static UIPluginManager getUIPluginManager() {
- return UIPluginManagerImpl.getInstance();
- }
+ }
}
Modified:
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/admin/ModifyUser.java
URL:
http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/admin/ModifyUser.java?view=diff&rev=559881&r1=559880&r2=559881
==============================================================================
---
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/admin/ModifyUser.java
(original)
+++
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/admin/ModifyUser.java
Thu Jul 26 09:55:31 2007
@@ -25,6 +25,7 @@
import org.apache.roller.weblogger.business.WebloggerFactory;
import org.apache.roller.weblogger.business.UserManager;
import org.apache.roller.weblogger.pojos.User;
+import org.apache.roller.weblogger.ui.core.RollerContext;
import org.apache.roller.weblogger.ui.struts2.util.UIAction;
@@ -137,19 +138,20 @@
getUser().grantRole("admin");
}
+
RollerContext.flushAuthenticationUserCache(getUser().getUserName());
+
// save the updated profile
mgr.saveUser(getUser());
WebloggerFactory.getWeblogger().flush();
- // TODO: i18n
- addMessage("user updated.");
-
+ addMessage("userAdmin.userSaved");
+
return INPUT;
} catch (WebloggerException ex) {
log.error("ERROR in action", ex);
// TODO: i18n
- addError("unexpected error doing profile save");
+ addError("userAdmin.error.unexpectedError");
}
}
@@ -162,8 +164,7 @@
private void myValidate() {
if(getUser().getId() == null) {
- // TODO: i18n
- addError("user not found");
+ addError("userAdmin.error.userNotFound");
}
if (StringUtils.isEmpty(getBean().getEmailAddress())) {
addError("error.add.user.missingEmailAddress");
Modified:
roller/trunk/apps/weblogger/web/WEB-INF/classes/ApplicationResources.properties
URL:
http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/web/WEB-INF/classes/ApplicationResources.properties?view=diff&rev=559881&r1=559880&r2=559881
==============================================================================
---
roller/trunk/apps/weblogger/web/WEB-INF/classes/ApplicationResources.properties
(original)
+++
roller/trunk/apps/weblogger/web/WEB-INF/classes/ApplicationResources.properties
Thu Jul 26 09:55:31 2007
@@ -1565,7 +1565,10 @@
userAdmin.tip.locale=User''s preferred locale.
userAdmin.tip.timeZone=User''s preferred timezone.
+userAdmin.userSaved=User profile saved
+
userAdmin.error.userNotFound=Specified user not found
+userAdmin.error.unexpected=Unexpected error
# --------------------------------------------------------------- User register
Modified: roller/trunk/apps/weblogger/web/WEB-INF/security.xml
URL:
http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/web/WEB-INF/security.xml?view=diff&rev=559881&r1=559880&r2=559881
==============================================================================
--- roller/trunk/apps/weblogger/web/WEB-INF/security.xml (original)
+++ roller/trunk/apps/weblogger/web/WEB-INF/security.xml Thu Jul 26 09:55:31
2007
@@ -125,13 +125,12 @@
<bean id="daoAuthenticationProvider"
class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
<property name="userDetailsService" ref="jdbcAuthenticationDao"/>
- <!-- <property name="userCache" ref="userCache"/> -->
+ <property name="userCache" ref="userCache"/>
</bean>
<!-- Read users from Roller API -->
<bean id="jdbcAuthenticationDao"
class="org.apache.roller.weblogger.ui.core.security.RollerUserDetailsService"/>
- <!--
<bean id="userCache"
class="org.acegisecurity.providers.dao.cache.EhCacheBasedUserCache">
<property name="cache">
<bean class="org.springframework.cache.ehcache.EhCacheFactoryBean">
@@ -142,7 +141,6 @@
</bean>
</property>
</bean>
- -->
<bean id="anonymousAuthenticationProvider"
class="org.acegisecurity.providers.anonymous.AnonymousAuthenticationProvider">
<property name="key" value="anonymous"/>