在 Spring Boot 中使用shiro配置过滤器
时间: 2023-06-27 17:08:14 浏览: 233
在 Spring Boot 中使用 Shiro 配置过滤器有以下几个步骤:
1. 引入 Shiro 和 Spring Boot 的相关依赖:
```
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring-boot-starter</artifactId>
<version>1.7.1</version>
</dependency>
```
2. 配置 Shiro:
在 Spring Boot 中,可以在 application.yml 或 application.properties 文件中配置 Shiro。以下是一个 application.yml 的例子:
```
shiro:
filter-chain-definition-map:
/login: anon
/logout: anon
/**: authc
```
这里配置了三个过滤器:
- /login:匿名访问,不需要认证和授权。
- /logout:匿名访问,不需要认证和授权。
- /**:需要认证和授权。
3. 配置 ShiroFilterFactoryBean:
在 Spring Boot 中,可以通过 ShiroFilterFactoryBean 来配置 Shiro 的过滤器。以下是一个示例:
```
@Configuration
public class ShiroConfig {
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultWebSecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(securityManager);
shiroFilterFactoryBean.setLoginUrl("/login");
shiroFilterFactoryBean.setUnauthorizedUrl("/unauthorized");
// 设置过滤器链
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
filterChainDefinitionMap.put("/logout", "logout");
filterChainDefinitionMap.put("/login", "anon");
filterChainDefinitionMap.put("/**", "authc");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}
@Bean
public DefaultWebSecurityManager securityManager(Realm realm) {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(realm);
return securityManager;
}
@Bean
public Realm realm() {
return new MyRealm();
}
}
```
这里配置了三个过滤器:
- /logout:logout 过滤器用于处理退出登录,不需要认证和授权。
- /login:anon 过滤器用于匿名访问,不需要认证和授权。
- /**:authc 过滤器用于认证和授权。
4. 配置 Realm:
在 Spring Boot 中,可以通过实现 Realm 接口来自定义认证和授权逻辑。以下是一个示例:
```
public class MyRealm extends AuthorizingRealm {
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
// 添加授权信息
authorizationInfo.addRole("admin");
authorizationInfo.addStringPermission("user:list");
return authorizationInfo;
}
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
UsernamePasswordToken upToken = (UsernamePasswordToken) token;
String username = upToken.getUsername();
String password = new String(upToken.getPassword());
// 校验用户名和密码
if ("admin".equals(username) && "123456".equals(password)) {
return new SimpleAuthenticationInfo(username, password, getName());
} else {
throw new AuthenticationException("用户名或密码错误");
}
}
}
```
这里模拟了一个简单的认证和授权逻辑。当用户名和密码为 admin 和 123456 时,认证通过,授权拥有 admin 角色和 user:list 权限。
以上是在 Spring Boot 中使用 Shiro 配置过滤器的基本步骤。需要注意的是,Shiro 的过滤器和拦截器是有顺序的,如果顺序不正确,可能会导致一些问题。
阅读全文