Zc提问: shiro过滤器配置
Ai回答: Shiro 是一个 Java 安全框架,用于处理认证(Authentication)、授权(Authorization)、加密(Cryptography)和会话管理(Session Management)。在 Web 应用中,Shiro 通常通过 `Filter` 来实现请求的权限控制。
在使用 Shiro 的 Web 应用中,通常是通过 `web.xml` 文件配置 Shiro 的过滤器(Filter),或者在 Spring Boot 中通过配置类或 `application.properties` 进行配置。
📌 一、基本的 Shiro Filter 配置(web.xml)
xml
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
然后你需要在 Spring 配置文件中定义 `ShiroFilterFactoryBean`,例如:
java
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
bean.setSecurityManager(securityManager);
// 设置登录页面
bean.setLoginUrl(/login);
// 设置未授权页面
bean.setUnauthorizedUrl(/403);
// 配置访问规则
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
filterChainDefinitionMap.put(/login, anon);
filterChainDefinitionMap.put(/logout, logout);
filterChainDefinitionMap.put(/, authc);
bean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return bean;
}
📌 二、Spring Boot 中的 Shiro Filter 配置
在 Spring Boot 中,你可以通过 `@Configuration` 和 `@Bean` 来配置 Shiro。
示例:Spring Boot 中的 Shiro 配置
java
@Configuration
public class ShiroConfig {
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(myRealm());
return securityManager;
}
@Bean
public MyRealm myRealm() {
return new MyRealm();
}
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
bean.setSecurityManager(securityManager);
// 设置登录页面
bean.setLoginUrl(/login);
// 设置未授权页面
bean.setUnauthorizedUrl(/403);
// 配置访问规则
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
filterChainDefinitionMap.put(/login, anon);
filterChainDefinitionMap.put(/logout, logout);
filterChainDefinitionMap.put(/, authc);
bean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return bean;
}
}
📌 三、Shiro Filter 的常用规则说明
| URL 模式 | 过滤器名称 | 说明 |
|-|||
| `/login` | `anon` | 匿名用户可访问 |
| `/logout`| `logout` | 注销操作 |
| `/` | `authc` | 需要认证后才能访问 |
| `/admin/` | `roles[admin]` | 只有具有 admin 角色的用户才能访问 |
| `/user/**` | `perms[user:read]` | 只有拥有 user:read 权限的用户才能访问 |
📌 四、自定义 Realm 实现
你还需要实现一个 `Realm` 来提供用户的认证和授权信息。例如:
java
public class MyRealm extends AuthorizingRealm {
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
String username = (String) token.getPrincipal();
// 根据用户名查询数据库中的密码
String password = getPasswordByUsername(username);
return new SimpleAuthenticationInfo(username, password, getName());
}
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
String username = (String) principals.getPrimaryPrincipal();
Set<String> roles = getRolesByUsername(username);
Set<String> permissions = getPermissionsByUsername(username);
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
info.setRoles(roles);
info.setStringPermissions(permissions);
return info;
}
}
✅ 总结
Shiro 的过滤器是通过 `ShiroFilterFactoryBean` 配置的。
常见的过滤器规则包括 `anon`, `authc`, `logout`, `roles`, `perms`。
在 Spring Boot 中可以通过配置类来简化 Shiro 的初始化流程。
如果你有具体的项目结构(如是否使用 Spring Boot、Spring MVC 等),我可以给出更详细的配置示例。欢迎继续提问!
商家广告:
📱咨询:13560190937 李经理
✉️咨询:649099016@qq.com
🔗网址:www.gdznjh.com
🏢公司:广州梓成净化设备制造有限公司
🏭厂址:广州番禺大龙街道长沙路34号北门5栋厂房
0
IP地址: 246.148.3.81
搜索次数: 103
提问时间: 2025-05-12 06:14:49
热门提问:
二人风淋室
高效过滤器分类
净化食品生产车间
出口风淋室
过滤棉芯
负压传递窗
伟星前置过滤器价格多少钱
无尘车间认证标准
201不锈钢卷板生产厂家
芜湖初效过滤器
超净工作台是正压还是负压
洁净区风淋室的
丰城f7过滤器订做
河南风淋室生产企业
工业除尘烟气过滤布袋
12w的过滤器要多少电
食品车间净化施工公司
空气过滤器图片大全
净水过滤器怎么选
无尘车间温湿度国家标准
温馨提示:
本站所有问答由Ai自动创作,若有误差请用“联系”里面信息通知我们人工修改或删除。
技术支持:
本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.05.20》搭建本站。