Spring Boot Shiro 配置详解:入门教程及关闭方法
Spring Boot Shiro 配置详解:入门教程及关闭方法
本文将详细介绍如何在 Spring Boot 项目中集成 Apache Shiro 进行安全管理,从基本配置到自定义 Realm,以及如何关闭 Shiro 功能,并提供代码示例。
1. 添加依赖
在 pom.xml 文件中添加 Shiro 依赖:
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.8.0</version>
</dependency>
2. 基本配置
创建 ShiroConfig 类,并使用 @Configuration 注解将其标记为配置类:
package com.kj.shiro;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.realm.Realm;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author 破晓
* @date 2022-01-22 22:15
*/
@Configuration
public class ShiroConfig {
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(securityManager);
// 设置默认登录的 URL,身份认证失败会访问该 URL
shiroFilterFactoryBean.setLoginUrl("/login");
// 设置成功之后要跳转的链接
shiroFilterFactoryBean.setSuccessUrl("/");
// 设置未授权界面,权限认证失败会访问该 URL
shiroFilterFactoryBean.setUnauthorizedUrl("/unauthorized");
// LinkedHashMap 是有序的,进行顺序拦截器配置
Map<String, String> filterChainMap = new LinkedHashMap<>();
/*
1). anon 可以被匿名访问
2). authc 必须认证(登录)后才可以访问
......
*/
filterChainMap.put("/**","anon");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainMap);
return shiroFilterFactoryBean;
}
@Bean
public SecurityManager securityManager(Realm singleRealm){
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(singleRealm);
return securityManager;
}
}
3. 自定义 Realm
创建一个 CustomRealm 类,并实现 Realm 接口,用于处理用户身份验证和授权:
package com.kj.shiro;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class CustomRealm extends AuthorizingRealm {
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
// 获取用户名
String username = (String) token.getPrincipal();
// 模拟数据库查询用户信息,根据用户名获取密码
String password = "123456";
if (username == null || password == null) {
throw new UnknownAccountException("用户名或密码错误");
}
// 返回 AuthenticationInfo 对象,用于封装用户信息
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(username, password, getName());
return info;
}
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
// 获取用户名
String username = (String) principals.getPrimaryPrincipal();
// 模拟数据库查询用户权限,根据用户名获取角色和权限
Set<String> roles = new HashSet<>(Arrays.asList("admin", "user"));
Set<String> permissions = new HashSet<>(Arrays.asList("user:read", "user:write"));
// 返回 AuthorizationInfo 对象,用于封装角色和权限信息
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
info.setRoles(roles);
info.setStringPermissions(permissions);
return info;
}
}
4. 关闭 Shiro
要关闭 Shiro,只需将 ShiroConfig 类中的 @Configuration 注解注释掉即可:
// @Configuration
public class ShiroConfig {
// ...
}
总结
本文介绍了如何在 Spring Boot 项目中集成 Apache Shiro 进行安全管理,包括基本配置、自定义 Realm 和关闭 Shiro 功能,并提供了相应的代码示例。希望本文能帮助您快速掌握 Shiro 的基本使用,并能根据实际需求进行扩展。
原文地址: https://www.cveoy.top/t/topic/nFaX 著作权归作者所有。请勿转载和采集!