001: /*
002: * JBoss, Home of Professional Open Source.
003: * Copyright 2006, Red Hat Middleware LLC, and individual contributors
004: * as indicated by the @author tags. See the copyright.txt file in the
005: * distribution for a full listing of individual contributors.
006: *
007: * This is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU Lesser General Public License as
009: * published by the Free Software Foundation; either version 2.1 of
010: * the License, or (at your option) any later version.
011: *
012: * This software is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this software; if not, write to the Free
019: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021: */
022: package javax.security.jacc;
023:
024: import java.io.Serializable;
025: import java.security.Permission;
026:
027: import org.jboss.util.id.SerialVersion;
028:
029: /** Class for Servlet isUserInRole (String reference) permissions. A
030: * WebRoleRefPermission is a named permission and has actions.
031: *
032: * The name of an WebRoleRefPermission (also referred to as the target name)
033: * identifies a Web resource by the servlet name (in the deployment descriptor
034: * corresponding to the component from which the call to isUserInRole
035: * (String reference) is being made.
036: *
037: * The actions of an WebRoleRefPermission identifies the role reference to which
038: * the permission applies. A WebRoleRefPermission is checked to determine if the
039: * subject is a member of the role identified by the reference.
040: *
041: * Implementations of this class MAY implement newPermissionCollection or
042: * inherit its implementation from the super class.
043: *
044: * @link http://java.sun.com/j2ee/1.4/docs/api/
045: *
046: * @author Scott.Stark@jboss.org
047: * @author Ron Monzillo, Gary Ellison (javadoc)
048: * @version $Revision: 57196 $
049: */
050: public final class WebRoleRefPermission extends Permission implements
051: Serializable {
052: /** @since 4.0.2 */
053: private static final long serialVersionUID;
054: static {
055: if (SerialVersion.version == SerialVersion.LEGACY)
056: serialVersionUID = 141000;
057: else
058: serialVersionUID = 1;
059: }
060:
061: /** The security-role-ref/role-link value */
062: private String actions;
063: private transient int hashCode;
064:
065: /** Creates a new WebRoleRefPermission with the specified name and actions.
066: *
067: * @param name - the servlet-name that identifies the application specific
068: * web resource in whose context the role references are to be evaluated.
069: * @param actions - identifies the role reference to which the permission
070: * pertains. The role reference is scoped to the Web resource identified in
071: * the name parameter. The value of the role reference must not be null or
072: * the empty string.
073: */
074: public WebRoleRefPermission(String name, String actions) {
075: super (name);
076: this .actions = actions;
077: this .hashCode = name.hashCode() + actions.hashCode();
078: }
079:
080: /** Checks two WebRoleRefPermission objects for equality.
081: * WebRoleRefPermission objects are equivalent if they have case equivalent
082: * name and actions values.
083: *
084: * @param p the permission to check for equality
085: * @return true if this is equivalent to p, false otherwise.
086: */
087: public boolean equals(Object p) {
088: if (p == this )
089: return true;
090: if ((p instanceof WebRoleRefPermission) == false)
091: return false;
092:
093: boolean equals = false;
094: WebRoleRefPermission wrrp = (WebRoleRefPermission) p;
095: String pname = wrrp.getName();
096: if (this .getName().equals(pname)) {
097: String pactions = wrrp.getActions();
098: if (this .getActions().equals(pactions))
099: equals = true;
100: }
101: return equals;
102: }
103:
104: /** Returns the security-role-ref target role name.
105: *
106: * @return the security-role-ref target role name.
107: */
108: public String getActions() {
109: return actions;
110: }
111:
112: /** Returns the hash code value for this WebRoleRefPermission. The properties
113: * of the returned hash code must be as follows:
114: *
115: * - During the lifetime of a Java application, the hashCode method must
116: * return the same integer value, every time it is called on a
117: * WebRoleRefPermission object. The value returned by hashCode for a
118: * particular WebRoleRefPermission need not remain consistent from one
119: * execution of an application to another.
120: * - If two WebRoleRefPermission objects are equal according to the equals
121: * method, then calling the hashCode method on each of the two Permission
122: * objects must produce the same integer result (within an application).
123: *
124: * @return the permission hash code.
125: */
126: public int hashCode() {
127: return hashCode;
128: }
129:
130: /** Determines if the argument Permission is "implied by" this
131: * WebRoleRefPermission. For this to be the case:
132: *
133: * - The argument must be an instanceof WebRoleRefPermission
134: * - with name equivalent to this WebRoleRefPermission, and
135: * - with role reference equivalent to this WebRoleRefPermission
136: * (as defined in their actions)
137: *
138: * @param p
139: * @return true if the specified permission is implied by this object, false
140: * otherwise.
141: */
142: public boolean implies(Permission p) {
143: return equals(p);
144: }
145: }
|