shiro filter
时间: 2024-09-14 11:02:17 浏览: 46
Shiro(Spring Security Integration for Java)是一个强大的轻量级安全框架,用于保护Spring应用的安全。它通过Filter(过滤器)模型集成到了Spring MVC、Web工作流、Portlet和Struts2等多个应用服务器和框架。Shiro Filter的主要作用是将授权和身份验证流程自动化地应用于HTTP请求,流程通常包含以下几个步骤:
1. **URL拦截**:Shiro Filter会检查用户是否有权限访问请求的资源,如果没有权限,则返回相应的错误页面或者执行自定义的拒绝策略。
2. **身份验证**:当用户尝试访问受保护的资源时,首先进行身份验证,比如基本认证、令牌验证或其他第三方认证方式。
3. **授权**:一旦用户通过了身份验证,Shiro还会进一步检查其是否具有访问该资源的权限。这通常是基于角色基础或策略基础的。
4. **会话管理**:Shiro还负责会话的跟踪和管理,如cookie session、数据库存储等。
5. **记账**:记录用户的操作日志,便于审计和追踪。
Shiro Filter非常灵活,可以根据项目需求定制拦截规则、登录界面等。在配置上,主要是编写SecurityManager或者WebSecurityConfig来定义过滤链路和策略。
相关问题
shiroFilter
Shiro (Security Handler Interceptor Object) 是一个开源的身份与访问管理框架,它允许你在Java应用程序中实现安全控制。ShiroFilter 是 Shiro 的核心组件之一,它是一个基于过滤器(Filter)的设计模式,用于处理HTTP请求,实现权限控制、会话管理等功能。
ShiroFilter的工作原理是通过定义一组过滤链(FilterChain),每个过滤器对应特定的安全策略。当请求到达时,Shiro会按照预先配置的顺序执行这些过滤器。如果某个过滤器返回的是`DENY`,则请求会被拒绝;如果是`PERMIT`,则继续下一层过滤器,直到找到`ALLOW`或者过滤链结束。
以下是一个简单的ShiroFilter配置示例:
```xml
<filter-chain-manager>
<filters>
<!-- 其他过滤器配置... -->
<filter name="authc" class="org.apache.shiro.web.filter.authc.AuthenticationFilter">
<param name="loginUrl" value="/login"/>
</filter>
<filter name="logout" class="org.apache.shiro.web.filter.logout.LogoutFilter">
<param name="logoutSuccessUrl" value="/logoutSuccess"/>
</filter>
<!-- 添加自定义过滤器... -->
<filter-chain>
<filter-name>customFilter</filter-name>
<filter-class>com.example.MyCustomFilter</filter-class>
<!-- 可以添加其他filter到此链... -->
<filter-ref>authc</filter-ref>
<filter-ref>logout</filter-ref>
</filter-chain>
</filters>
<filter-chains>
<!-- 定义不同URL的过滤器链... -->
<filter-chain id="unprotected" filters="/*"/>
<filter-chain id="secured" filters="authc, roles【yourRole】"/>
</filter-chains>
</filter-chain-manager>
```
在这个例子中,`/unprotected`路径不需要身份验证,而`/secured`路径需要登录并具有指定角色才能访问。
@Bean("shiroFilter") public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) { ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean(); shiroFilter.setSecurityManager(securityManager); //oauth过滤 Map<String, Filter> filters = new HashMap<>(4); filters.put("oauth2", new OAuth2Filter()); shiroFilter.setFilters(filters); Map<String, String> filterMap = new LinkedHashMap<>(8); filterMap.put("/sys/login", "anon"); filterMap.put("/sys/**", "oauth2"); filterMap.put("/manage/**", "oauth2"); filterMap.put("/wx/**", "anon"); filterMap.put("/**", "anon"); shiroFilter.setFilterChainDefinitionMap(filterMap); return shiroFilter; }
这是一个使用 Spring 和 Shiro 框架实现的安全认证过滤器配置。该代码片段中,首先创建了一个 ShiroFilterFactoryBean 实例,并将安全管理器注入该实例中。然后,创建了一个名为 oauth2 的过滤器,并将其加入到 filters 集合中。接着,创建了一个有序的、基于 URL 模式的过滤器链,并将该链设置到 ShiroFilterFactoryBean 实例中,其中 "/sys/login" 路径被设置为匿名访问,而 "/sys/**"、"/manage/**" 路径需要进行 oauth2 认证。最后,将 ShiroFilterFactoryBean 实例返回。
阅读全文