diff --git a/core/src/main/java/org/acegisecurity/taglibs/authz/AclTag.java b/core/src/main/java/org/acegisecurity/taglibs/authz/AclTag.java
index bedb19cefe..88a3663078 100644
--- a/core/src/main/java/org/acegisecurity/taglibs/authz/AclTag.java
+++ b/core/src/main/java/org/acegisecurity/taglibs/authz/AclTag.java
@@ -37,6 +37,7 @@ import java.util.StringTokenizer;
import javax.servlet.ServletContext;
import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.tagext.TagSupport;
@@ -106,130 +107,113 @@ public class AclTag extends TagSupport {
final String evaledPermissionsString = ExpressionEvaluationUtils
.evaluateString("hasPermission", hasPermission, pageContext);
- if ((null != evaledPermissionsString)
- && !"".equals(evaledPermissionsString)) {
- Integer[] requiredIntegers = null;
+ Integer[] requiredIntegers = null;
- try {
- requiredIntegers = parseIntegersString(evaledPermissionsString);
- } catch (NumberFormatException nfe) {
- throw new JspException(nfe);
- }
+ try {
+ requiredIntegers = parseIntegersString(evaledPermissionsString);
+ } catch (NumberFormatException nfe) {
+ throw new JspException(nfe);
+ }
- if (requiredIntegers.length == 0) {
- throw new JspException(
- "A comma separate list of integers representing authorised permissions was NOT provided via the 'hasPermission' attribute");
- }
+ Object resolvedDomainObject = null;
- Object resolvedDomainObject = null;
-
- if (domainObject instanceof String) {
- resolvedDomainObject = ExpressionEvaluationUtils.evaluate("domainObject",
- (String) domainObject, Object.class, pageContext);
- } else {
- resolvedDomainObject = domainObject;
- }
-
- if (resolvedDomainObject == null) {
- if (logger.isDebugEnabled()) {
- logger.debug(
- "domainObject resolved to null, so including tag body");
- }
-
- // Of course they have access to a null object!
- return Tag.EVAL_BODY_INCLUDE;
- }
-
- if ((ContextHolder.getContext() == null)
- || !(ContextHolder.getContext() instanceof SecureContext)
- || (((SecureContext) ContextHolder.getContext())
- .getAuthentication() == null)) {
- if (logger.isDebugEnabled()) {
- logger.debug(
- "ContextHolder did not return a non-null Authentication object, so skipping tag body");
- }
-
- return Tag.SKIP_BODY;
- }
-
- Authentication auth = ((SecureContext) ContextHolder.getContext())
- .getAuthentication();
-
- ApplicationContext context = getContext(pageContext
- .getServletContext());
-
- if (context == null) {
- throw new JspException(
- "applicationContext unavailable from servlet context");
- }
-
- Map beans = context.getBeansOfType(AclManager.class, false, false);
-
- if (beans.size() == 0) {
- throw new JspException(
- "No AclManager would found the application context: "
- + context.toString());
- }
-
- String beanName = (String) beans.keySet().iterator().next();
- AclManager aclManager = (AclManager) context.getBean(beanName);
-
- // Obtain aclEntrys applying to the current Authentication object
- AclEntry[] acls = aclManager.getAcls(resolvedDomainObject, auth);
+ if (domainObject instanceof String) {
+ resolvedDomainObject = ExpressionEvaluationUtils.evaluate("domainObject",
+ (String) domainObject, Object.class, pageContext);
+ } else {
+ resolvedDomainObject = domainObject;
+ }
+ if (resolvedDomainObject == null) {
if (logger.isDebugEnabled()) {
- logger.debug("Authentication: '" + auth + "' has: "
- + ((acls == null) ? 0 : acls.length)
- + " AclEntrys for domain object: '" + resolvedDomainObject
- + "' from AclManager: '" + aclManager.toString() + "'");
+ logger.debug(
+ "domainObject resolved to null, so including tag body");
}
- if ((acls == null) || (acls.length == 0)) {
- return Tag.SKIP_BODY;
- }
-
- for (int i = 0; i < acls.length; i++) {
- // Locate processable AclEntrys
- if (acls[i] instanceof AbstractBasicAclEntry) {
- AbstractBasicAclEntry processableAcl = (AbstractBasicAclEntry) acls[i];
-
- // See if principal has any of the required permissions
- for (int y = 0; y < requiredIntegers.length; y++) {
- if (processableAcl.isPermitted(
- requiredIntegers[y].intValue())) {
- if (logger.isDebugEnabled()) {
- logger.debug(
- "Including tag body as found permission: "
- + requiredIntegers[y]
- + " due to AclEntry: '" + processableAcl
- + "'");
- }
-
- return Tag.EVAL_BODY_INCLUDE;
- }
- }
- }
- }
+ // Of course they have access to a null object!
+ return Tag.EVAL_BODY_INCLUDE;
+ }
+ if ((ContextHolder.getContext() == null)
+ || !(ContextHolder.getContext() instanceof SecureContext)
+ || (((SecureContext) ContextHolder.getContext()).getAuthentication() == null)) {
if (logger.isDebugEnabled()) {
- logger.debug("No permission, so skipping tag body");
+ logger.debug(
+ "ContextHolder did not return a non-null Authentication object, so skipping tag body");
}
return Tag.SKIP_BODY;
- } else {
- throw new JspException("Unsupported use of auth:acl tag");
}
+
+ Authentication auth = ((SecureContext) ContextHolder.getContext())
+ .getAuthentication();
+
+ ApplicationContext context = getContext(pageContext);
+ Map beans = context.getBeansOfType(AclManager.class, false, false);
+
+ if (beans.size() == 0) {
+ throw new JspException(
+ "No AclManager would found the application context: "
+ + context.toString());
+ }
+
+ String beanName = (String) beans.keySet().iterator().next();
+ AclManager aclManager = (AclManager) context.getBean(beanName);
+
+ // Obtain aclEntrys applying to the current Authentication object
+ AclEntry[] acls = aclManager.getAcls(resolvedDomainObject, auth);
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("Authentication: '" + auth + "' has: "
+ + ((acls == null) ? 0 : acls.length)
+ + " AclEntrys for domain object: '" + resolvedDomainObject
+ + "' from AclManager: '" + aclManager.toString() + "'");
+ }
+
+ if ((acls == null) || (acls.length == 0)) {
+ return Tag.SKIP_BODY;
+ }
+
+ for (int i = 0; i < acls.length; i++) {
+ // Locate processable AclEntrys
+ if (acls[i] instanceof AbstractBasicAclEntry) {
+ AbstractBasicAclEntry processableAcl = (AbstractBasicAclEntry) acls[i];
+
+ // See if principal has any of the required permissions
+ for (int y = 0; y < requiredIntegers.length; y++) {
+ if (processableAcl.isPermitted(
+ requiredIntegers[y].intValue())) {
+ if (logger.isDebugEnabled()) {
+ logger.debug(
+ "Including tag body as found permission: "
+ + requiredIntegers[y] + " due to AclEntry: '"
+ + processableAcl + "'");
+ }
+
+ return Tag.EVAL_BODY_INCLUDE;
+ }
+ }
+ }
+ }
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("No permission, so skipping tag body");
+ }
+
+ return Tag.SKIP_BODY;
}
/**
* Allows test cases to override where application context obtained from.
*
- * @param servletContext as required by Spring's
- * WebApplicationContextUtils
+ * @param pageContext so the ServletContext
can be accessed as
+ * required by Spring's WebApplicationContextUtils
*
- * @return the Spring application context
+ * @return the Spring application context (never null
)
*/
- protected ApplicationContext getContext(ServletContext servletContext) {
+ protected ApplicationContext getContext(PageContext pageContext) {
+ ServletContext servletContext = pageContext.getServletContext();
+
return WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
}
diff --git a/core/src/main/java/org/acegisecurity/taglibs/authz/AuthenticationTag.java b/core/src/main/java/org/acegisecurity/taglibs/authz/AuthenticationTag.java
index e361835ed2..0f0effc8ee 100644
--- a/core/src/main/java/org/acegisecurity/taglibs/authz/AuthenticationTag.java
+++ b/core/src/main/java/org/acegisecurity/taglibs/authz/AuthenticationTag.java
@@ -66,6 +66,10 @@ public class AuthenticationTag extends TagSupport {
return Tag.SKIP_BODY;
}
+ if (!OPERATION_PRINCIPAL.equalsIgnoreCase(operation)) {
+ throw new JspException("Unsupported use of auth:authentication tag");
+ }
+
if ((ContextHolder.getContext() == null)
|| !(ContextHolder.getContext() instanceof SecureContext)
|| (((SecureContext) ContextHolder.getContext()).getAuthentication() == null)) {
@@ -75,20 +79,16 @@ public class AuthenticationTag extends TagSupport {
Authentication auth = ((SecureContext) ContextHolder.getContext())
.getAuthentication();
- if (OPERATION_PRINCIPAL.equalsIgnoreCase(operation)) {
- if (auth.getPrincipal() == null) {
- return Tag.SKIP_BODY;
- } else if (auth.getPrincipal() instanceof UserDetails) {
- writeMessage(((UserDetails) auth.getPrincipal()).getUsername());
+ if (auth.getPrincipal() == null) {
+ return Tag.SKIP_BODY;
+ } else if (auth.getPrincipal() instanceof UserDetails) {
+ writeMessage(((UserDetails) auth.getPrincipal()).getUsername());
- return Tag.SKIP_BODY;
- } else {
- writeMessage(auth.getPrincipal().toString());
-
- return Tag.SKIP_BODY;
- }
+ return Tag.SKIP_BODY;
} else {
- throw new JspException("Unsupported use of auth:athentication tag");
+ writeMessage(auth.getPrincipal().toString());
+
+ return Tag.SKIP_BODY;
}
}