基于 shiro 构建的web项目,改项目为Web mvc项目,基于servlet3.1 + jsp构建。
- web.xml
- Environment
- Listener
配置$$ServletContextListener$$上下文监听,在容器启动后开始初始化Environment
<listener>
<listener-class>com.sucls.security.security.SimpleEnvironmentLoaderListener</listener-class>
</listener>
主要目的为了构建以下两个对象,并注入到Environment:
- FilterChainResolver
- 在FilterChainManager基础上解析用户配置过滤规则,这里需要开发者根据需要配置,最终将配置解析成FilterChain,类似配置如下:
/assets/** = anon /login = authc /admin/** = roles[ROLE_ADMIN] /admin/add* = perms[add:*] //[action:type:instance] /** = authc
- 过滤器配置是有序的,当一个请求匹配到多个过滤器时,会依次执行完,最后执行原始的Filter(非ShiroFilter)中
/admin/** = anon /admin/** = authc
- SecurityManager
- SessionManager 实现会话管理,当部署集群时,需要通过分布式session管理来实现
- Authenticator 认证器,主要提供多种Realm以及相关策略
- SubjectDAO Subject存储
- RememberMeManager 提供RememberMe的支持,一般基于Cookies
- CacheManager 缓存服务
配置Environment class类型,在上下文创建后,会根据配置构建WebEnvironment,提供了SecurityManager、FilterChainResolver,为ShiroFilter服务
<context-param>
<param-name>shiroEnvironmentClass</param-name>
<param-value>org.apache.shiro.web.env.DefaultWebEnvironment</param-value>
</context-param>
所有请求都会经过ShiroFilter,ShiroFilter属于一个FilterChain,通过FilterChainResolver解析用户配置的过滤规则实现认证与鉴权
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
简单的定义了DispatcherServlet,主要处理页面和数据
- *.html
- *.json
Shiro在AOP这块主要提供了一套简单的抽象解决方法,想通过AOP真正实现访问控制,需要开发者自定义对象代理,或者统一交由IOC容器管理。 目前提供了以下下几个注解以及对应的处理:
- @RequiresAuthentication
- @RequiresGuest
- @RequiresUser
- @RequiresRoles
- @RequiresPermissions
示例中通过Cglib动态代理,在系统启动时对ServletHandler的目标对象进行代理,结合Shiro提供的方案简单的实现方法层面的访问控制。
+
-
-
通过该项目,了解基于shiro作为安全框架,shiro可以做什么?开发者需要做什么?