Package org.tynamo.security.shiro
Class AccessControlFilter
java.lang.Object
org.apache.shiro.web.servlet.ServletContextSupport
org.apache.shiro.web.servlet.AbstractFilter
org.apache.shiro.web.servlet.NameableFilter
org.apache.shiro.web.servlet.OncePerRequestFilter
org.apache.shiro.web.servlet.AdviceFilter
org.tynamo.security.shiro.AccessControlFilter
- All Implemented Interfaces:
jakarta.servlet.Filter,org.apache.shiro.lang.util.Nameable
- Direct Known Subclasses:
AuthenticationFilter,AuthorizationFilter,UserFilter
public abstract class AccessControlFilter
extends org.apache.shiro.web.servlet.AdviceFilter
Superclass for any filter that controls access to a resource and may redirect the user to the login page
if they are not authenticated. This superclass provides the method
saveRequestAndRedirectToLogin(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse)
which is used by many subclasses as the behavior when a user is unauthenticated.
This class and the subclasses that are used as Shiro's built-in filters were copied from Shiro 1.1.0
and modified locally to implement same behavior as specified in https://issues.apache.org/jira/browse/SHIRO-256
We'll revert to using Shiro's filters if the feature gets implemented in Shiro 2.x- Since:
- 0.4.0
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringConstant representing the HTTP 'GET' request method, equal toGET.static Stringprotected org.apache.shiro.util.PatternMatcherstatic final StringConstant representing the HTTP 'POST' request method, equal toPOST.static booleanstatic Stringstatic Stringstatic StringFields inherited from class org.apache.shiro.web.servlet.OncePerRequestFilter
ALREADY_FILTERED_SUFFIXFields inherited from class org.apache.shiro.web.servlet.AbstractFilter
filterConfig -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidprotected LoginContextServiceReturns the login URL used to authenticate a user.protected org.apache.shiro.subject.SubjectgetSubject(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response) Convenience method that acquires the Subject associated with the request.Returns the success url to use as the default location a user is sent after logging in.protected abstract booleanisAccessAllowed(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response, Object mappedValue) Returnstrueif the request is allowed to proceed through the filter normally, orfalseif the request should be handled by theonAccessDenied(request,response,mappedValue)method instead.protected booleanisLoginRequest(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response) Returnstrueif the incoming request is a login request,falseotherwise.booleanprotected abstract booleanonAccessDenied(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response) Processes requests where the subject was denied access as determined by theisAccessAllowedmethod.protected booleanonAccessDenied(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response, Object mappedValue) Processes requests where the subject was denied access as determined by theisAccessAllowedmethod, retaining themappedValuethat was used during configuration.booleanonPreHandle(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response, Object mappedValue) ReturnstrueifisAccessAllowed(Request,Response,Object), otherwise returns the result ofonAccessDenied(Request,Response,Object).protected booleanpreHandle(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response) protected voidredirectToLogin(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response) Convenience method for subclasses that merely acquires thegetLoginUrland redirects the request to that url.protected voidsaveRequest(jakarta.servlet.ServletRequest request) Convenience method merely delegates toWebUtils.saveRequest(request)to save the request state for reuse later.protected voidsaveRequestAndRedirectToLogin(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response) Convenience method for subclasses to use when a login redirect is required.voidvoidsetLoginUrl(String loginUrl) Sets the login URL used to authenticate a user.voidsetRedirectToSavedUrl(boolean redirectToSavedUrl) voidsetSuccessUrl(String successUrl) Sets the default/fallback success url to use as the default location a user is sent after logging in.voidsetUnauthorizedUrl(String unauthorizedUrl) Methods inherited from class org.apache.shiro.web.servlet.AdviceFilter
afterCompletion, cleanup, doFilterInternal, executeChain, postHandleMethods inherited from class org.apache.shiro.web.servlet.OncePerRequestFilter
doFilter, getAlreadyFilteredAttributeName, isEnabled, isEnabled, isFilterOncePerRequest, setEnabled, setFilterOncePerRequest, shouldNotFilterMethods inherited from class org.apache.shiro.web.servlet.NameableFilter
getName, setName, toStringBuilderMethods inherited from class org.apache.shiro.web.servlet.AbstractFilter
destroy, getFilterConfig, getInitParam, init, onFilterConfigSet, setFilterConfigMethods inherited from class org.apache.shiro.web.servlet.ServletContextSupport
getContextAttribute, getContextInitParam, getServletContext, removeContextAttribute, setContextAttribute, setServletContext, toString
-
Field Details
-
TAPESTRY_VERSION
-
LOGIN_URL
-
SUCCESS_URL
-
UNAUTHORIZED_URL
-
REDIRECT_TO_SAVED_URL
public static boolean REDIRECT_TO_SAVED_URL -
pathMatcher
protected org.apache.shiro.util.PatternMatcher pathMatcher -
GET_METHOD
Constant representing the HTTP 'GET' request method, equal toGET.- See Also:
-
POST_METHOD
Constant representing the HTTP 'POST' request method, equal toPOST.- See Also:
-
-
Constructor Details
-
AccessControlFilter
-
-
Method Details
-
addConfig
-
setConfig
-
getSuccessUrl
Returns the success url to use as the default location a user is sent after logging in. Typically a redirect after login will redirect to the originally request URL; this property is provided mainly as a fallback in case the original request URL is not available or not specified. The default value is.invalid reference
#DEFAULT_SUCCESS_URL- Returns:
- the success url to use as the default location a user is sent after logging in.
-
setSuccessUrl
Sets the default/fallback success url to use as the default location a user is sent after logging in. Typically a redirect after login will redirect to the originally request URL; this property is provided mainly as a fallback in case the original request URL is not available or not specified. The default value is.invalid reference
#DEFAULT_SUCCESS_URL- Parameters:
successUrl- the success URL to redirect the user to after a successful login.
-
getLoginUrl
Returns the login URL used to authenticate a user. Most Shiro filters use this url as the location to redirect a user when the filter requires authentication. Unless overridden, theis assumed, which can be overridden viainvalid reference
DEFAULT_LOGIN_URLsetLoginUrl.- Returns:
- the login URL used to authenticate a user, used when redirecting users if authentication is required.
-
setLoginUrl
Sets the login URL used to authenticate a user. Most Shiro filters use this url as the location to redirect a user when the filter requires authentication. Unless overridden, theis assumed.invalid reference
DEFAULT_LOGIN_URL- Parameters:
loginUrl- the login URL used to authenticate a user, used when redirecting users if authentication is required.
-
getUnauthorizedUrl
-
setUnauthorizedUrl
-
getSubject
protected org.apache.shiro.subject.Subject getSubject(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response) Convenience method that acquires the Subject associated with the request. The default implementation simply returnsSecurityUtils.getSubject().- Parameters:
request- the incomingServletRequestresponse- the outgoingServletResponse- Returns:
- the Subject associated with the request.
-
isAccessAllowed
protected abstract boolean isAccessAllowed(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response, Object mappedValue) throws Exception Returnstrueif the request is allowed to proceed through the filter normally, orfalseif the request should be handled by theonAccessDenied(request,response,mappedValue)method instead.- Parameters:
request- the incomingServletRequestresponse- the outgoingServletResponsemappedValue- the filter-specific config value mapped to this filter in the URL rules mappings.- Returns:
trueif the request should proceed through the filter normally,falseif the request should be processed by this filter'sonAccessDenied(ServletRequest,ServletResponse,Object)method instead.- Throws:
Exception- if an error occurs during processing.
-
onAccessDenied
protected boolean onAccessDenied(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response, Object mappedValue) throws Exception Processes requests where the subject was denied access as determined by theisAccessAllowedmethod, retaining themappedValuethat was used during configuration. This method immediately delegates toonAccessDenied(ServletRequest,ServletResponse)as a convenience in that most post-denial behavior does not need the mapped config again.- Parameters:
request- the incomingServletRequestresponse- the outgoingServletResponsemappedValue- the config specified for the filter in the matching request's filter chain.- Returns:
trueif the request should continue to be processed; false if the subclass will handle/render the response directly.- Throws:
Exception- if there is an error processing the request.- Since:
- 1.0
-
onAccessDenied
protected abstract boolean onAccessDenied(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response) throws Exception Processes requests where the subject was denied access as determined by theisAccessAllowedmethod.- Parameters:
request- the incomingServletRequestresponse- the outgoingServletResponse- Returns:
trueif the request should continue to be processed; false if the subclass will handle/render the response directly.- Throws:
Exception- if there is an error processing the request.
-
onPreHandle
public boolean onPreHandle(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response, Object mappedValue) throws Exception ReturnstrueifisAccessAllowed(Request,Response,Object), otherwise returns the result ofonAccessDenied(Request,Response,Object).- Returns:
trueifisAccessAllowed, otherwise returns the result ofonAccessDenied.- Throws:
Exception- if an error occurs.
-
preHandle
protected boolean preHandle(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response) throws Exception - Overrides:
preHandlein classorg.apache.shiro.web.servlet.AdviceFilter- Throws:
Exception
-
isLoginRequest
protected boolean isLoginRequest(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response) Returnstrueif the incoming request is a login request,falseotherwise. The default implementation merely returnstrueif the incoming request matches the configuredloginUrlby calling.invalid reference
pathsMatch(loginUrl, request)- Parameters:
request- the incomingServletRequestresponse- the outgoingServletResponse- Returns:
trueif the incoming request is a login request,falseotherwise.
-
saveRequestAndRedirectToLogin
protected void saveRequestAndRedirectToLogin(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response) throws IOException Convenience method for subclasses to use when a login redirect is required. This implementation simply callssaveRequest(request)and thenredirectToLogin(request,response).- Parameters:
request- the incomingServletRequestresponse- the outgoingServletResponse- Throws:
IOException- if an error occurs.
-
saveRequest
protected void saveRequest(jakarta.servlet.ServletRequest request) Convenience method merely delegates toWebUtils.saveRequest(request)to save the request state for reuse later. This is mostly used to retain user request state when a redirect is issued to return the user to their originally requested url/resource. If you need to save and then immediately redirect the user to login, consider usingsaveRequestAndRedirectToLogin(request,response)directly.- Parameters:
request- the incoming ServletRequest to save for re-use later (for example, after a redirect).
-
redirectToLogin
protected void redirectToLogin(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response) throws IOException Convenience method for subclasses that merely acquires thegetLoginUrland redirects the request to that url. N.B. If you want to issue a redirect with the intention of allowing the user to then return to their originally requested URL, don't use this method directly. Instead you should callsaveRequestAndRedirectToLogin(request,response), which will save the current request state so that it can be reconstructed and re-used after a successful login.- Parameters:
request- the incomingServletRequestresponse- the outgoingServletResponse- Throws:
IOException- if an error occurs.
-
isRedirectToSavedUrl
public boolean isRedirectToSavedUrl() -
setRedirectToSavedUrl
public void setRedirectToSavedUrl(boolean redirectToSavedUrl) -
getLoginContextService
-