org.jboss.security.plugins.javaee.WebAuthorizationHelper Maven / Gradle / Ivy
/*
* JBoss, Home of Professional Open Source
* Copyright 2007, JBoss Inc., and individual contributors as indicated
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.security.plugins.javaee;
import java.security.Principal;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.security.auth.Subject;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.jboss.security.AuthorizationManager;
import org.jboss.security.PicketBoxLogger;
import org.jboss.security.PicketBoxMessages;
import org.jboss.security.SecurityConstants;
import org.jboss.security.audit.AuditLevel;
import org.jboss.security.authorization.AuthorizationContext;
import org.jboss.security.authorization.AuthorizationException;
import org.jboss.security.authorization.ResourceKeys;
import org.jboss.security.authorization.resources.WebResource;
import org.jboss.security.callbacks.SecurityContextCallbackHandler;
import org.jboss.security.identity.RoleGroup;
import org.jboss.security.identity.plugins.SimpleRole;
import org.jboss.security.identity.plugins.SimpleRoleGroup;
import org.jboss.security.javaee.AbstractWebAuthorizationHelper;
/**
* Web Authorization Helper Implementation
* @author [email protected]
* @since Apr 18, 2008
* @version $Revision$
*/
public class WebAuthorizationHelper
extends AbstractWebAuthorizationHelper
{
@Override
public boolean checkResourcePermission(
Map contextMap,
ServletRequest request,
ServletResponse response,
Subject callerSubject,
String contextID,
String canonicalRequestURI)
{
return checkResourcePermission(contextMap, request, response, callerSubject, contextID, canonicalRequestURI, null);
}
@Override
public boolean checkResourcePermission(
Map contextMap,
ServletRequest request,
ServletResponse response,
Subject callerSubject,
String contextID,
String canonicalRequestURI,
List roles)
{
if(contextID == null)
throw PicketBoxMessages.MESSAGES.invalidNullArgument("contextID");
if(request == null)
throw PicketBoxMessages.MESSAGES.invalidNullArgument("request");
if(response == null)
throw PicketBoxMessages.MESSAGES.invalidNullArgument("response");
if(canonicalRequestURI == null)
throw PicketBoxMessages.MESSAGES.invalidNullArgument("canonicalRequestURI");
AuthorizationManager authzMgr = securityContext.getAuthorizationManager();
if(authzMgr == null)
throw PicketBoxMessages.MESSAGES.invalidNullProperty("AuthorizationManager");
boolean isAuthorized = false;
WebResource webResource = new WebResource(Collections.unmodifiableMap(contextMap));
webResource.setPolicyContextID(contextID);
webResource.setServletRequest(request);
webResource.setServletResponse(response);
webResource.setCallerSubject(callerSubject);
webResource.setCanonicalRequestURI(canonicalRequestURI);
SecurityContextCallbackHandler sch = new SecurityContextCallbackHandler(this.securityContext);
RoleGroup callerRoles = null;
if (roles == null)
callerRoles = authzMgr.getSubjectRoles(callerSubject, sch);
else
{
callerRoles = new SimpleRoleGroup(SecurityConstants.ROLES_IDENTIFIER);
for (String role : roles)
{
callerRoles.addRole(new SimpleRole(role));
}
}
try
{
int permit = authzMgr.authorize(webResource, callerSubject, callerRoles);
isAuthorized = (permit == AuthorizationContext.PERMIT);
String level = (permit == AuthorizationContext.PERMIT ? AuditLevel.SUCCESS : AuditLevel.FAILURE);
if(this.enableAudit)
this.authorizationAudit(level,webResource, null);
}
catch (AuthorizationException e)
{
isAuthorized = false;
PicketBoxLogger.LOGGER.debugFailureExecutingMethod("hasResourcePermission", e);
if(this.enableAudit)
authorizationAudit(AuditLevel.ERROR,webResource,e);
}
return isAuthorized;
}
@Override
public boolean hasRole(
String roleName,
Principal principal,
String servletName,
Set principalRoles,
String contextID,
Subject callerSubject)
{
return hasRole(roleName, principal, servletName, principalRoles, contextID, callerSubject, null);
}
@Override
public boolean hasRole(
String roleName,
Principal principal,
String servletName,
Set principalRoles,
String contextID,
Subject callerSubject,
List roles)
{
if(roleName == null)
throw PicketBoxMessages.MESSAGES.invalidNullArgument("roleName");
if(contextID == null)
throw PicketBoxMessages.MESSAGES.invalidNullArgument("contextID");
if(callerSubject == null)
throw PicketBoxMessages.MESSAGES.invalidNullArgument("callerSubject");
AuthorizationManager authzMgr = securityContext.getAuthorizationManager();
if(authzMgr == null)
throw PicketBoxMessages.MESSAGES.invalidNullProperty("AuthorizationManager");
boolean hasTheRole = false;
Map map = new HashMap();
map.put(ResourceKeys.ROLENAME, roleName);
map.put(ResourceKeys.ROLEREF_PERM_CHECK, Boolean.TRUE);
map.put(ResourceKeys.PRINCIPAL_ROLES, principalRoles);
map.put(ResourceKeys.POLICY_REGISTRATION, getPolicyRegistration());
WebResource webResource = new WebResource(Collections.unmodifiableMap(map));
webResource.setPolicyContextID(contextID);
webResource.setPrincipal(principal);
webResource.setServletName(servletName);
webResource.setCallerSubject(callerSubject);
SecurityContextCallbackHandler sch = new SecurityContextCallbackHandler(this.securityContext);
RoleGroup callerRoles = null;
if (roles == null)
callerRoles = authzMgr.getSubjectRoles(callerSubject, sch);
else
{
callerRoles = new SimpleRoleGroup(SecurityConstants.ROLES_IDENTIFIER);
for (String role : roles)
{
callerRoles.addRole(new SimpleRole(role));
}
}
try
{
int permit = authzMgr.authorize(webResource, callerSubject, callerRoles);
hasTheRole = (permit == AuthorizationContext.PERMIT);
String level = (hasTheRole ? AuditLevel.SUCCESS : AuditLevel.FAILURE);
if(this.enableAudit)
this.authorizationAudit(level,webResource, null);
}
catch (AuthorizationException e)
{
hasTheRole = false;
PicketBoxLogger.LOGGER.debugFailureExecutingMethod("hasRole", e);
if(this.enableAudit)
authorizationAudit(AuditLevel.ERROR,webResource,e);
}
return hasTheRole;
}
@Override
public boolean hasUserDataPermission(Map contextMap,
ServletRequest request,
ServletResponse response,
String contextID,
Subject callerSubject)
{
return hasUserDataPermission(contextMap, request, response, contextID, callerSubject, null);
}
@Override
public boolean hasUserDataPermission(Map contextMap,
ServletRequest request,
ServletResponse response,
String contextID,
Subject callerSubject,
List roles)
{
if(contextID == null)
throw PicketBoxMessages.MESSAGES.invalidNullArgument("contextID");
if(callerSubject == null)
throw PicketBoxMessages.MESSAGES.invalidNullArgument("callerSubject");
if(request == null)
throw PicketBoxMessages.MESSAGES.invalidNullArgument("request");
if(response == null)
throw PicketBoxMessages.MESSAGES.invalidNullArgument("response");
AuthorizationManager authzMgr = securityContext.getAuthorizationManager();
if(authzMgr == null)
throw PicketBoxMessages.MESSAGES.invalidNullProperty("AuthorizationManager");
boolean hasPerm = false;
contextMap.put(ResourceKeys.POLICY_REGISTRATION, getPolicyRegistration());
WebResource webResource = new WebResource(Collections.unmodifiableMap(contextMap));
webResource.setPolicyContextID(contextID);
webResource.setServletRequest(request);
webResource.setServletResponse(response);
webResource.setCallerSubject(callerSubject);
SecurityContextCallbackHandler sch = new SecurityContextCallbackHandler(this.securityContext);
RoleGroup callerRoles = null;
if (roles == null)
callerRoles = authzMgr.getSubjectRoles(callerSubject, sch);
else
{
callerRoles = new SimpleRoleGroup(SecurityConstants.ROLES_IDENTIFIER);
for (String role : roles)
{
callerRoles.addRole(new SimpleRole(role));
}
}
try
{
int permit = authzMgr.authorize(webResource, callerSubject, callerRoles);
hasPerm = (permit == AuthorizationContext.PERMIT);
String level = (hasPerm ? AuditLevel.SUCCESS : AuditLevel.FAILURE);
if(this.enableAudit)
this.authorizationAudit(level,webResource, null);
}
catch (AuthorizationException e)
{
hasPerm = false;
PicketBoxLogger.LOGGER.debugFailureExecutingMethod("hasUserDataPermission", e);
if(this.enableAudit)
authorizationAudit(AuditLevel.ERROR,webResource,e);
}
return hasPerm;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy