--- /dev/null
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.catalina.deploy;
+
+
+/**
+ * <p>Representation of a security role reference for a web application, as
+ * represented in a <code><security-role-ref></code> element
+ * in the deployment descriptor.</p>
+ *
+ * @author Mark Thomas
+ * @version $Revision$ $Date$
+ * @since Tomcat 5.5
+ */
+
+public class SecurityRoleRef {
+
+
+ // ------------------------------------------------------------- Properties
+
+
+ /**
+ * The (required) role name.
+ */
+ private String name = null;
+
+ public String getName() {
+ return (this.name);
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+
+ /**
+ * The optional role link.
+ */
+ private String link = null;
+
+ public String getLink() {
+ return (this.link);
+ }
+
+ public void setLink(String link) {
+ this.link = link;
+ }
+
+
+
+ // --------------------------------------------------------- Public Methods
+
+
+ /**
+ * Return a String representation of this object.
+ */
+ public String toString() {
+
+ StringBuffer sb = new StringBuffer("SecurityRoleRef[");
+ sb.append("name=");
+ sb.append(name);
+ if (link != null) {
+ sb.append(", link=");
+ sb.append(link);
+ }
+ sb.append("]");
+ return (sb.toString());
+
+ }
+
+
+}
import org.apache.catalina.deploy.ContextHandler;
import org.apache.catalina.deploy.ContextService;
import org.apache.catalina.deploy.SecurityConstraint;
+import org.apache.catalina.deploy.SecurityRoleRef;
import org.apache.tomcat.util.IntrospectionUtils;
import org.apache.tomcat.util.digester.CallMethodRule;
import org.apache.tomcat.util.digester.CallParamRule;
digester.addCallMethod(prefix + "web-app/servlet/run-as/role-name",
"setRunAs", 0);
- digester.addCallMethod(prefix + "web-app/servlet/security-role-ref",
- "addSecurityReference", 2);
- digester.addCallParam(prefix + "web-app/servlet/security-role-ref/role-link", 1);
- digester.addCallParam(prefix + "web-app/servlet/security-role-ref/role-name", 0);
+ digester.addRule(prefix + "web-app/servlet/security-role-ref",
+ new SecurityRoleRefCreateRule());
+ digester.addCallMethod(
+ prefix + "web-app/servlet/security-role-ref/role-link",
+ "setLink", 0);
+ digester.addCallMethod(
+ prefix + "web-app/servlet/security-role-ref/role-name",
+ "setName", 0);
digester.addCallMethod(prefix + "web-app/servlet/servlet-class",
"setServletClass", 0);
public void begin(String namespace, String name, Attributes attributes)
throws Exception {
- Context context = (Context) digester.peek(digester.getCount() - 1);
Object top = digester.peek();
Class paramClasses[] = new Class[1];
paramClasses[0] = "String".getClass();
}
}
+/**
+ * A Rule that adds a security-role-ref to a servlet, allowing for the fact that
+ * role-link is an optional element.
+ */
+final class SecurityRoleRefCreateRule extends Rule {
+
+ public SecurityRoleRefCreateRule() {
+ }
+
+ public void begin(String namespace, String name, Attributes attributes)
+ throws Exception {
+ SecurityRoleRef securityRoleRef = new SecurityRoleRef();
+ digester.push(securityRoleRef);
+ if (digester.getLogger().isDebugEnabled())
+ digester.getLogger().debug("new SecurityRoleRef");
+ }
+
+ public void end(String namespace, String name)
+ throws Exception {
+ SecurityRoleRef securityRoleRef = (SecurityRoleRef) digester.pop();
+ Wrapper wrapper = (Wrapper) digester.peek();
+
+ wrapper.addSecurityReference(securityRoleRef.getName(),
+ securityRoleRef.getLink());
+
+ if (digester.getLogger().isDebugEnabled())
+ digester.getLogger().debug("pop SecurityRoleRef");
+ }
+}
\ No newline at end of file