Class RealmAdapter
- All Implemented Interfaces:
com.sun.enterprise.security.integration.RealmInitializer,org.apache.catalina.Lifecycle,org.apache.catalina.Realm,org.glassfish.hk2.api.PostConstruct
- Author:
- Harpreet Singh, JeanFrancois Arcand
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final Stringstatic final Stringprotected booleanprotected static final StringDescriptive information about this Realm implementation.protected final ReadWriteLockstatic final Stringprotected com.sun.enterprise.security.ee.web.integration.WebSecurityManagerAWebSecurityManagerobject associated with a CONTEXT_IDprotected com.sun.enterprise.security.ee.web.integration.WebSecurityManagerFactoryThe factory used for creatingWebSecurityManagerobject.Fields inherited from class org.apache.catalina.realm.RealmBase
checkIfRequestIsSecure, container, controller, debug, digest, digestEncoding, info, lifecycle, log, md, rb, sha256Helper, started, support, validateFields inherited from interface org.apache.catalina.Lifecycle
AFTER_START_EVENT, AFTER_STOP_EVENT, BEFORE_START_EVENT, BEFORE_STOP_EVENT, INIT_EVENT, START_EVENT, STOP_EVENTFields inherited from interface org.apache.catalina.Realm
AUTHENTICATE_NEEDED, AUTHENTICATE_NOT_NEEDED, AUTHENTICATED_NOT_AUTHORIZED -
Constructor Summary
ConstructorsConstructorDescriptionRealmAdapter(String realmName, String moduleID) Create for Web Services Enterprise Beans endpoint authentication. -
Method Summary
Modifier and TypeMethodDescriptionauthenticate(jakarta.servlet.http.HttpServletRequest httpServletRequest) booleanauthenticate(jakarta.servlet.http.HttpServletRequest request, com.sun.enterprise.security.ee.web.integration.WebPrincipal principal) IASRI 4688449 This method was only used by EEInstanceListener to set the security context prior to invocations by re-authenticating a previously set WebPrincipal.authenticate(org.apache.catalina.HttpRequest request, String username, char[] password) authenticate(org.apache.catalina.HttpRequest request, X509Certificate[] certificates) protected voidconfigureSecurity(com.sun.enterprise.deployment.WebBundleDescriptor webBundleDescriptor, boolean isSystem) Commit the Jakarta Authorization module, bringing the policy into service.static voidcopySubject(Subject target, Subject source) createFailOveredPrincipal(String username) This method is added to create a Principal based on the username only.voiddestroy()org.apache.catalina.deploy.SecurityConstraint[]findSecurityConstraints(String requestPathMB, String httpMethod, org.apache.catalina.Context context) org.apache.catalina.deploy.SecurityConstraint[]findSecurityConstraints(org.apache.catalina.HttpRequest request, org.apache.catalina.Context context) org.glassfish.epicyro.services.BaseAuthenticationServiceprotected StringgetName()protected char[]getPassword(String username) protected PrincipalgetPrincipal(String username) com.sun.enterprise.deployment.WebBundleDescriptorcom.sun.enterprise.security.ee.web.integration.WebSecurityManagergetWebSecurityManager(boolean logNull) Utility method to get web security manager.booleanhasResourcePermission(org.apache.catalina.HttpRequest request, org.apache.catalina.HttpResponse response, org.apache.catalina.deploy.SecurityConstraint[] constraints, org.apache.catalina.Context context) booleanbooleanhasRole(org.apache.catalina.HttpRequest request, org.apache.catalina.HttpResponse response, Principal principal, String role) booleanhasUserDataPermission(org.apache.catalina.HttpRequest request, org.apache.catalina.HttpResponse response, org.apache.catalina.deploy.SecurityConstraint[] constraints) booleanhasUserDataPermission(org.apache.catalina.HttpRequest request, org.apache.catalina.HttpResponse response, org.apache.catalina.deploy.SecurityConstraint[] constraints, String uri, String method) voidinitAuthenticationService(jakarta.servlet.ServletContext servletContext) voidinitializeRealm(Object descriptor, boolean isSystemApp, String initialRealmName) booleaninvokeAuthenticateDelegate(org.apache.catalina.HttpRequest request, org.apache.catalina.HttpResponse response, org.apache.catalina.Context context, org.apache.catalina.Authenticator authenticator, boolean calledFromAuthenticate) booleaninvokePostAuthenticateDelegate(org.apache.catalina.HttpRequest request, org.apache.catalina.HttpResponse response, org.apache.catalina.Context context) booleanisSecurityExtensionEnabled(jakarta.servlet.ServletContext context) Return true if Jakarta Authentication is available.voidlogout()voidlogout(org.apache.catalina.HttpRequest httpRequest) voidvoidpostSetRunAsIdentity(org.glassfish.api.invocation.ComponentInvocation inv) Attempts to restore old SecurityContext (but fails).intpreAuthenticateCheck(org.apache.catalina.HttpRequest request, org.apache.catalina.HttpResponse response, org.apache.catalina.deploy.SecurityConstraint[] constraints, boolean disableProxyCaching, boolean securePagesWithPragma, boolean ssoEnabled) voidpreSetRunAsIdentity(org.glassfish.api.invocation.ComponentInvocation componentInvocation) Set the run-as principal into the SecurityContext when needed.static voidremoveFromCredentials(Subject subject, Class<?> typeToRemove) voidsetCurrentSecurityContext(Principal principal) voidvoidsetRealmName(String realmName) voidsetVirtualServer(Object container) Sets the virtual server on which the web module (with which this RealmAdapter is associated with) has been deployed.static voidstatic voidstatic voidtoSubjectCredential(Subject subject, Object credential) voidMethods inherited from class org.apache.catalina.realm.RealmBase
addLifecycleListener, addPropertyChangeListener, authenticate, backgroundProcess, digest, disableProxyCaching, findLifecycleListeners, getAlternateAuthType, getAlternatePrincipal, getContainer, getController, getDebug, getDigest, getDigest, getDigestEncoding, getInfo, getValidate, hasMessageDigest, hasRole, log, log, removeLifecycleListener, removePropertyChangeListener, setContainer, setController, setDebug, setDigest, setDigestEncoding, setRealmName, setValidate, start, stop
-
Field Details
-
SECURITY_CONTEXT
- See Also:
-
BASIC
- See Also:
-
FORM
- See Also:
-
name
Descriptive information about this Realm implementation.- See Also:
-
webSecurityManager
protected volatile com.sun.enterprise.security.ee.web.integration.WebSecurityManager webSecurityManagerAWebSecurityManagerobject associated with a CONTEXT_ID -
isCurrentURIincluded
protected boolean isCurrentURIincluded -
rwLock
-
webSecurityManagerFactory
@Inject protected com.sun.enterprise.security.ee.web.integration.WebSecurityManagerFactory webSecurityManagerFactoryThe factory used for creatingWebSecurityManagerobject.
-
-
Constructor Details
-
RealmAdapter
public RealmAdapter() -
RealmAdapter
Create for Web Services Enterprise Beans endpoint authentication.Roles related data is not available here.
-
-
Method Details
-
initializeRealm
- Specified by:
initializeRealmin interfacecom.sun.enterprise.security.integration.RealmInitializer
-
isSecurityExtensionEnabled
public boolean isSecurityExtensionEnabled(jakarta.servlet.ServletContext context) Return true if Jakarta Authentication is available.- Specified by:
isSecurityExtensionEnabledin interfaceorg.apache.catalina.Realm- Overrides:
isSecurityExtensionEnabledin classorg.apache.catalina.realm.RealmBase- Returns:
- true if Jakarta Authentication is available. 1171
-
findSecurityConstraints
public org.apache.catalina.deploy.SecurityConstraint[] findSecurityConstraints(org.apache.catalina.HttpRequest request, org.apache.catalina.Context context) - Specified by:
findSecurityConstraintsin interfaceorg.apache.catalina.Realm- Overrides:
findSecurityConstraintsin classorg.apache.catalina.realm.RealmBase
-
findSecurityConstraints
public org.apache.catalina.deploy.SecurityConstraint[] findSecurityConstraints(String requestPathMB, String httpMethod, org.apache.catalina.Context context) - Specified by:
findSecurityConstraintsin interfaceorg.apache.catalina.Realm- Overrides:
findSecurityConstraintsin classorg.apache.catalina.realm.RealmBase
-
hasUserDataPermission
public boolean hasUserDataPermission(org.apache.catalina.HttpRequest request, org.apache.catalina.HttpResponse response, org.apache.catalina.deploy.SecurityConstraint[] constraints) throws IOException - Specified by:
hasUserDataPermissionin interfaceorg.apache.catalina.Realm- Overrides:
hasUserDataPermissionin classorg.apache.catalina.realm.RealmBase- Throws:
IOException
-
hasUserDataPermission
public boolean hasUserDataPermission(org.apache.catalina.HttpRequest request, org.apache.catalina.HttpResponse response, org.apache.catalina.deploy.SecurityConstraint[] constraints, String uri, String method) throws IOException - Specified by:
hasUserDataPermissionin interfaceorg.apache.catalina.Realm- Overrides:
hasUserDataPermissionin classorg.apache.catalina.realm.RealmBase- Throws:
IOException
-
preAuthenticateCheck
public int preAuthenticateCheck(org.apache.catalina.HttpRequest request, org.apache.catalina.HttpResponse response, org.apache.catalina.deploy.SecurityConstraint[] constraints, boolean disableProxyCaching, boolean securePagesWithPragma, boolean ssoEnabled) throws IOException - Specified by:
preAuthenticateCheckin interfaceorg.apache.catalina.Realm- Overrides:
preAuthenticateCheckin classorg.apache.catalina.realm.RealmBase- Throws:
IOException
-
invokeAuthenticateDelegate
public boolean invokeAuthenticateDelegate(org.apache.catalina.HttpRequest request, org.apache.catalina.HttpResponse response, org.apache.catalina.Context context, org.apache.catalina.Authenticator authenticator, boolean calledFromAuthenticate) throws IOException - Specified by:
invokeAuthenticateDelegatein interfaceorg.apache.catalina.Realm- Overrides:
invokeAuthenticateDelegatein classorg.apache.catalina.realm.RealmBase- Throws:
IOException
-
getName
- Specified by:
getNamein classorg.apache.catalina.realm.RealmBase
-
getRealmName
- Specified by:
getRealmNamein interfaceorg.apache.catalina.Realm- Overrides:
getRealmNamein classorg.apache.catalina.realm.RealmBase
-
setVirtualServer
Sets the virtual server on which the web module (with which this RealmAdapter is associated with) has been deployed.- Specified by:
setVirtualServerin interfacecom.sun.enterprise.security.integration.RealmInitializer- Parameters:
container- The virtual server
-
updateWebSecurityManager
public void updateWebSecurityManager()- Specified by:
updateWebSecurityManagerin interfacecom.sun.enterprise.security.integration.RealmInitializer
-
authenticate
public Principal authenticate(org.apache.catalina.HttpRequest request, String username, char[] password) - Specified by:
authenticatein interfaceorg.apache.catalina.Realm- Overrides:
authenticatein classorg.apache.catalina.realm.RealmBase
-
authenticate
- Specified by:
authenticatein interfaceorg.apache.catalina.Realm
-
authenticate
public Principal authenticate(org.apache.catalina.HttpRequest request, X509Certificate[] certificates) - Specified by:
authenticatein interfaceorg.apache.catalina.Realm- Overrides:
authenticatein classorg.apache.catalina.realm.RealmBase
-
hasResourcePermission
public boolean hasResourcePermission(org.apache.catalina.HttpRequest request, org.apache.catalina.HttpResponse response, org.apache.catalina.deploy.SecurityConstraint[] constraints, org.apache.catalina.Context context) throws IOException - Specified by:
hasResourcePermissionin interfaceorg.apache.catalina.Realm- Overrides:
hasResourcePermissionin classorg.apache.catalina.realm.RealmBase- Throws:
IOException
-
invokePostAuthenticateDelegate
public boolean invokePostAuthenticateDelegate(org.apache.catalina.HttpRequest request, org.apache.catalina.HttpResponse response, org.apache.catalina.Context context) throws IOException - Specified by:
invokePostAuthenticateDelegatein interfaceorg.apache.catalina.Realm- Overrides:
invokePostAuthenticateDelegatein classorg.apache.catalina.realm.RealmBase- Throws:
IOException
-
hasRole
public boolean hasRole(org.apache.catalina.HttpRequest request, org.apache.catalina.HttpResponse response, Principal principal, String role) - Specified by:
hasRolein interfaceorg.apache.catalina.Realm- Overrides:
hasRolein classorg.apache.catalina.realm.RealmBase
-
destroy
public void destroy()- Overrides:
destroyin classorg.apache.catalina.realm.RealmBase
-
getWebDescriptor
public com.sun.enterprise.deployment.WebBundleDescriptor getWebDescriptor() -
getWebSecurityManager
public com.sun.enterprise.security.ee.web.integration.WebSecurityManager getWebSecurityManager(boolean logNull) Utility method to get web security manager. Will log warning if the manager is not found in the factory, and logNull is true.Note: webSecurityManagerFactory can be null the very questionable SOAP code just instantiates a RealmAdapter
- Parameters:
logNull-- Returns:
WebSecurityManageror null
-
hasRole
-
logout
public void logout(org.apache.catalina.HttpRequest httpRequest) - Specified by:
logoutin interfaceorg.apache.catalina.Realm- Overrides:
logoutin classorg.apache.catalina.realm.RealmBase
-
logout
public void logout()- Specified by:
logoutin interfacecom.sun.enterprise.security.integration.RealmInitializer
-
authenticate
public boolean authenticate(jakarta.servlet.http.HttpServletRequest request, com.sun.enterprise.security.ee.web.integration.WebPrincipal principal) IASRI 4688449 This method was only used by EEInstanceListener to set the security context prior to invocations by re-authenticating a previously set WebPrincipal. This is now cached so no need. -
preSetRunAsIdentity
public void preSetRunAsIdentity(org.glassfish.api.invocation.ComponentInvocation componentInvocation) Set the run-as principal into the SecurityContext when needed.This method will attempt to obtain the name of the servlet from the ComponentInvocation. Note that there may not be one since this gets called also during internal processing (not clear..) not just part of servlet requests. However, if it is not a servlet request there is no need (or possibility) to have a run-as setting so no further action is taken.
If the servlet name is present the runAsPrincipals cache is checked to find the run-as principal to use (if any). If one is set, the SecurityContext is switched to this principal.
- Parameters:
componentInvocation- The invocation object to process.
-
postSetRunAsIdentity
public void postSetRunAsIdentity(org.glassfish.api.invocation.ComponentInvocation inv) Attempts to restore old SecurityContext (but fails).In theory this method seems to attempt to check if a run-as principal was set by preSetRunAsIdentity() (based on the indirect assumption that if the servlet in the given invocation has a run-as this must've been the case). If so, it retrieves the oldSecurityContext from the invocation object and set it in the SecurityContext.
The problem is that the invocation object is not the same object as was passed in to preSetRunAsIdentity() so it will never contain the right info - see bug 4757733.
In practice it means this method only ever sets the SecurityContext to null (if run-as matched) or does nothing. In particular note the implication that it will be set to null after a run-as invocation completes. This behavior will be retained for the time being for consistency with RI. It must be fixed later.
- Parameters:
inv- The invocation object to process.
-
getPassword
- Specified by:
getPasswordin classorg.apache.catalina.realm.RealmBase
-
getPrincipal
- Specified by:
getPrincipalin classorg.apache.catalina.realm.RealmBase
-
createFailOveredPrincipal
This method is added to create a Principal based on the username only. Hercules stores the username as part of authentication failover and needs to create a Principal based on username only invalid input: '<'sridhar.satuloori@sun.com>- Parameters:
username-- Returns:
- Principal for the user username HERCULES:add
-
setRealmName
-
copySubject
-
toSubject
-
toSubject
-
toSubjectCredential
-
removeFromCredentials
-
configureSecurity
protected void configureSecurity(com.sun.enterprise.deployment.WebBundleDescriptor webBundleDescriptor, boolean isSystem) Commit the Jakarta Authorization module, bringing the policy into service. Implementation note: If the committed policy doesn't contains all the permissions, the role mapper is probably broken. -
setCurrentSecurityContextWithWebPrincipal
-
setCurrentSecurityContext
-
initAuthenticationService
public void initAuthenticationService(jakarta.servlet.ServletContext servletContext) -
getAuthenticationService
public org.glassfish.epicyro.services.BaseAuthenticationService getAuthenticationService()- Returns:
- the authenticationService
-
postConstruct
public void postConstruct()- Specified by:
postConstructin interfaceorg.glassfish.hk2.api.PostConstruct
-