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 等),我可以给出更详细的配置示例。欢迎继续提问!


商家广告

液槽高效过滤器1

🏬产品无隔板中效过滤器  广东风淋室 

📱咨询13560190937 李经理

✉️咨询649099016@qq.com

🔍微信
wx

🔗网址www.gdznjh.com

🏢公司广州梓成净化设备制造有限公司

🏭厂址广州番禺大龙街道长沙路34号北门5栋厂房


0

IP地址: 246.148.3.81

搜索次数: 103

提问时间: 2025-05-12 06:14:49

热门作画
无尘车间图片大全风机过滤网图片

热门提问
二人风淋室
高效过滤器分类
净化食品生产车间
出口风淋室
过滤棉芯
负压传递窗
伟星前置过滤器价格多少钱
无尘车间认证标准
201不锈钢卷板生产厂家
芜湖初效过滤器
超净工作台是正压还是负压
洁净区风淋室的
丰城f7过滤器订做
河南风淋室生产企业
工业除尘烟气过滤布袋
12w的过滤器要多少电
食品车间净化施工公司
空气过滤器图片大全
净水过滤器怎么选
无尘车间温湿度国家标准

友情链接
谷歌seo  月饼 

站长工具
whois查询 搜索

温馨提示
本站所有问答由Ai自动创作,若有误差请用“联系”里面信息通知我们人工修改或删除。

技术支持
本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.05.20》搭建本站。

上一篇198561985719858下一篇