public class WebContainerAuthorizer extends Object implements WebAuthorizer
Authorizer
interface, this class also provides a convenience
method isContainerAuthorized()
that queries the web application
descriptor to determine if the container manages authorization.Modifier and Type | Class and Description |
---|---|
class |
WebContainerAuthorizer.LocalEntityResolver
XML entity resolver that redirects resolution requests by JDOM, JAXP and
other XML parsers to locally-cached copies of the resources.
|
Modifier and Type | Field and Description |
---|---|
protected static org.apache.log4j.Logger |
log |
protected boolean |
m_containerAuthorized
Lazily-initialized boolean flag indicating whether the web container
protects JSPWiki resources.
|
protected Role[] |
m_containerRoles
A lazily-initialized array of Roles that the container knows about.
|
protected WikiEngine |
m_engine |
Constructor and Description |
---|
WebContainerAuthorizer()
Constructs a new instance of the WebContainerAuthorizer class.
|
Modifier and Type | Method and Description |
---|---|
Principal |
findRole(String role)
Looks up and returns a Role Principal matching a given String.
|
Principal[] |
getRoles()
Returns an array of role Principals this Authorizer knows about.
|
protected Role[] |
getRoles(org.jdom2.Document webxml)
Protected method that extracts the roles from JSPWiki's web application
deployment descriptor.
|
protected org.jdom2.Document |
getWebXml()
Returns an
Document representing JSPWiki's web
application deployment descriptor. |
void |
initialize(WikiEngine engine,
Properties props)
Initializes the authorizer for.
|
boolean |
isConstrained(String url,
Role role)
Protected method that identifies whether a particular webapp URL is
constrained to a particular Role.
|
boolean |
isContainerAuthorized()
Returns
true if the web container is configured to protect
certain JSPWiki resources by requiring authentication. |
boolean |
isUserInRole(javax.servlet.http.HttpServletRequest request,
Principal role)
Determines whether a user associated with an HTTP request possesses
a particular role.
|
boolean |
isUserInRole(WikiSession session,
Principal role)
Determines whether the Subject associated with a WikiSession is in a
particular role.
|
protected static final org.apache.log4j.Logger log
protected WikiEngine m_engine
protected Role[] m_containerRoles
web.xml
web application
deployment descriptor. If this file cannot be read for any reason, the
role list will be empty. This is a hack designed to get around the fact
that we have no direct way of querying the web container about which
roles it manages.protected boolean m_containerAuthorized
public WebContainerAuthorizer()
public void initialize(WikiEngine engine, Properties props)
initialize
in interface Authorizer
engine
- the current wiki engineprops
- the wiki engine initialization propertiespublic boolean isUserInRole(javax.servlet.http.HttpServletRequest request, Principal role)
HttpServletRequest.isUserInRole(String)
by converting the Principal's name to a String.isUserInRole
in interface WebAuthorizer
request
- the HTTP requestrole
- the role to checktrue
if the user is considered to be in the role,
false
otherwisepublic boolean isUserInRole(WikiSession session, Principal role)
null
, this method must
return false
.
This method simply examines the WikiSession subject to see if it
possesses the desired Principal. We assume that the method
WikiServletFilter.doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
previously executed, and that it has set the WikiSession
subject correctly by logging in the user with the various login modules,
in particular WebContainerLoginModule
}.
This is definitely a hack,
but it eliminates the need for WikiSession to keep dangling
references to the last WikiContext hanging around, just
so we can look up the HttpServletRequest.isUserInRole
in interface Authorizer
session
- the current WikiSessionrole
- the role to checktrue
if the user is considered to be in the role,
false
otherwiseAuthorizer.isUserInRole(org.apache.wiki.WikiSession, java.security.Principal)
public Principal findRole(String role)
null
.findRole
in interface Authorizer
role
- the name of the Role to retrievenull
Authorizer.initialize(WikiEngine, Properties)
public boolean isConstrained(String url, Role role)
Protected method that identifies whether a particular webapp URL is constrained to a particular Role. The resource is considered constrained if:
security-constraint
with a child
web-resource-collection/url-pattern
element matching the
URL, and:auth-constraint/role-name
element equal to the supplied
Role's getName()
method. If the supplied Role is Role.ALL,
it matches all rolesurl
- the web resourcerole
- the roletrue
if the resource is constrained to the role,
false
otherwisepublic boolean isContainerAuthorized()
true
if the web container is configured to protect
certain JSPWiki resources by requiring authentication. Specifically, this
method parses JSPWiki's web application descriptor (web.xml
)
and identifies whether the string representation of
Role.AUTHENTICATED
is required
to access /Delete.jsp
and LoginRedirect.jsp
.
If the administrator has uncommented the large
<security-constraint>
section of web.xml
,
this will be true. This is admittedly an indirect way to go about it, but
it should be an accurate test for default installations, and also in 99%
of customized installs.true
if the container protects resources,
false
otherwisepublic Principal[] getRoles()
web.xml
.
This method actually returns a defensive copy of an internally stored
array.getRoles
in interface Authorizer
protected Role[] getRoles(org.jdom2.Document webxml)
new Role("Administrator")
.webxml
- the web application deployment descriptorprotected org.jdom2.Document getWebXml() throws org.jdom2.JDOMException, IOException
Document
representing JSPWiki's web
application deployment descriptor. The document is obtained by calling
the servlet context's getResource()
method and requesting
/WEB-INF/web.xml
. For non-servlet applications, this
method calls this class'
ClassLoader.getResource(java.lang.String)
and requesting
WEB-INF/web.xml
.IOException
- if the deployment descriptor cannot be found or openedorg.jdom2.JDOMException
- if the deployment descriptor cannot be parsed correctlyCopyright © 2001-2019 The Apache Software Foundation. All rights reserved.