返回
用 Shiro 武装 Spring Boot:无懈可击的安全堡垒
见解分享
2023-09-01 23:29:42
Spring Boot 以其轻量级和开发效率而广受青睐,但它对安全性的原生支持却有些不足。为了填补这一空白,Shiro 横空出世,为 Spring Boot 应用提供了一套全面且可扩展的安全解决方案。
1. 携手同行:Shiro 与 Spring Boot
要将 Shiro 与 Spring Boot 集成,首先需要添加 Maven 依赖:
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring-boot-starter</artifactId>
<version>2.4.0</version>
</dependency>
2. 权限与认证的守护神:ShiroRealm
ShiroRealm 是 Shiro 的核心组件,负责处理用户的身份验证和授权。通过继承 AuthorizingRealm,我们可以定义自己的 ShiroRealm 实现:
@Component
public class MyShiroRealm extends AuthorizingRealm {
// 自定义身份验证逻辑
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
//...
}
// 自定义授权逻辑
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
//...
}
}
3. 运筹帷幄:ShiroConfig
ShiroConfig 是 Shiro 的配置中心,负责将 Shiro 与 Spring Boot 应用整合:
@Configuration
public class ShiroConfig {
@Bean
public DefaultWebSecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(myShiroRealm());
return securityManager;
}
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(securityManager);
//...
return shiroFilterFactoryBean;
}
}
4. 层层把关:ShiroFilter
ShiroFilter 负责拦截和处理请求,执行必要的安全检查:
shiroFilterFactoryBean.setFilterChainDefinitionMap(new HashMap<String, String>() {
{
put("/login", "anon"); // 匿名访问
put("/**", "authc"); // 需认证
}
});
5. 强力保障:Shiro注解
Shiro 提供了丰富的注解,可以方便地进行权限控制:
@RequiresAuthentication // 要求登录
@RequiresPermissions("user:add") // 要求具有添加用户的权限