A {@code SecurityManager} executes all security operations for <em>all</em> Subjects (aka users) across a single application. <p/> The interface itself primarily exists as a convenience - it extends the {@link hunt.shiro.authc.Authenticator}, {@link Authorizer}, and {@link SessionManager} interfaces, thereby consolidating these behaviors into a single point of reference. For most Shiro usages, this simplifies configuration and tends to be a more convenient approach than referencing {@code Authenticator}, {@code Authorizer}, and {@code SessionManager} instances separately; instead one only needs to interact with a single {@code SecurityManager} instance. <p/> In addition to the above three interfaces, this interface provides a number of methods supporting {@link Subject} behavior. A {@link hunt.shiro.subject.Subject Subject} executes authentication, authorization, and session operations for a <em>single</em> user, and as such can only be managed by {@code A SecurityManager} which is aware of all three functions. The three parent interfaces on the other hand do not 'know' about {@code Subject}s to ensure a clean separation of concerns. <p/> <b>Usage Note</b>: In actuality the large majority of application programmers won't interact with a SecurityManager very often, if at all. <em>Most</em> application programmers only care about security operations for the currently executing user, usually attained by calling {@link hunt.shiro.SecurityUtils#getSubject() SecurityUtils.getSubject()}. <p/> Framework developers on the other hand might find working with an actual SecurityManager useful.