Shiro 简介:
Apache Shiro 是 Java 的一个安全框架。目前,使用 Apache Shiro 的人越来越多,因为它相当简单,对比 Spring Security,可能没有 Spring Security 做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的 Shiro 就足够了。对于它俩到底哪个好,这个不必纠结,能更简单的解决项目问题就好了。
Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境。Shiro 可以帮助我们完成:认证、授权、加密、会话管理、与 Web 集成、缓存等。
更具体的介绍、学习可以看看这个链接:Shiro 简介_w3cschool
这个里面有Shrio的全部学习资料,看完这个之后,在来看Spring Boot 整合Shrio会更加明白,或者Spring Boot 整合Shrio后,再去看看这个文档,也会明白为什么会这么做了。
Spring Boot 的版本:
<version>2.4.10</version>
目录:
1、Spring Boot 与Shrio的简单整合,适合做单体项目
2、Shrio 的会话管理,可以用在前后端分离的项目
3、Shrio 使用redis做缓存
4、Shrio密码加密验证
一、Spring Boot 与Shrio的简单整合,适合做单体项目
1、pom.xml
<!--shiro与spring整合需要的包-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.4.0</version>
</dependency>
<!--shiro与thymeleaf整合需要的包-->
<dependency>
<groupId>com.github.theborakompanioni</groupId>
<artifactId>thymeleaf-extras-shiro</artifactId>
<version>2.0.0</version>
</dependency>
2、Shrio的配置类型:ShiroConfig
package com.example.springbootshrio.config;
import com.example.springbootshrio.shiro.CustomRealm;
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;
@Configuration
public class ShiroConfig {
@Bean(name = "shiroFilter")
public ShiroFilterFactoryBean shiroFilter(org.apache.shiro.mgt.SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(securityManager);
shiroFilterFactoryBean.setLoginUrl("/login.html");//登录页面
shiroFilterFactoryBean.setUnauthorizedUrl("/notRole");//未经授权就可以访问的页面
shiroFilterFactoryBean.setSuccessUrl("/successUrl");//成功页面
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
// anon:所有url都都可以匿名访问,一般写静态资源
filterChainDefinitionMap.put("/webjars/**", "anon");
filterChainDefinitionMap.put("/login", "anon");
filterChainDefinitionMap.put("/", "anon");
filterChainDefinitionMap.put("/front/**", "anon");
filterChainDefinitionMap.put("/api/**", "anon");
//authc:所有url都必须认证通过才可以访问
filterChainDefinitionMap.put("/admin/**", "authc");
filterChainDefinitionMap.put("/user/**", "authc");
//主要这行代码必须放在所有权限设置的最后,不然会导致所有 url 都被拦截 剩余的都需要认证
filterChainDefinitionMap.put("/**", "authc");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}
/**
* 创建 SecurityManager 并且绑定 Realm
* @return
*/
@Bean
public org.apache.shiro.mgt.SecurityManager securityManager() {
DefaultWebSecurityManager defaultSecurityManager = new DefaultWebSecurityManager();
defaultSecurityManager.setRealm(customRealm());
return defaultSecurityManager;
}
/**
*自定义身份认证realm
*/
@Bean
public CustomRealm customRealm() {
CustomRealm customRealm = new CustomRealm();
return customRealm;
}
/**
* 开启Shiro的注解(如@RequiresRoles,@RequiresPermissions),需借助SpringAOP扫描使用Shiro注解的类,并在必要时进行安全逻辑验证
* 配置以下两个bean(DefaultAdvisorAutoProxyCreator和AuthorizationAttributeSourceAdvisor)即可实现此功能
* @return
*/
@Bean
public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator(){
DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
advisorAutoProxyCreator.setProxyTargetClass(true);
return advisorAutoProxyCreator;
}
/**
* 开启shiro aop注解支持.
* 使用代理方式;所以需要开启代码支持;
* @param securityManager
* @return
*/
@Bean
public AuthorizationA

本文详细介绍了如何在SpringBoot项目中集成Apache Shiro进行权限管理,包括简单整合、会话管理、使用Redis做缓存以及密码加密验证。通过ShiroFilterFactoryBean配置过滤链,自定义Realm实现身份认证和授权,使用RedisManager和RedisCacheManager实现Session管理和缓存,以及使用HashedCredentialsMatcher进行密码加密。此外,还展示了前后端分离场景下Shiro的会话管理解决方案。
最低0.47元/天 解锁文章
697

被折叠的 条评论
为什么被折叠?



