SpringBoot整合JWT+Shiro
引入相关的依赖
编写配置
ShiroConfig
import com.demo.shiro.AccountReaIm;import com.demo.shiro.LoginReaIm;import com.demo.shiro.JwtFilter;import org.apache.shiro.mgt.DefaultSessionStorageEvaluator;import org.apache.shiro.mgt.DefaultSubjectDAO;import org.apache.shiro.mgt.SecurityManager;import org.apache.shiro.realm.Realm;import org.apache.shiro.session.mgt.SessionManager;import org.apache.shiro.spring.web.ShiroFilterFactoryBean;import org.apache.shiro.spring.web.config.DefaultShiroFilterChainDefinition;import org.apache.shiro.spring.web.config.ShiroFilterChainDefinition;import org.apache.shiro.web.mgt.DefaultWebSecurityManager;import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;import org.crazycake.shiro.RedisCacheManager;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.crazycake.shiro.RedisSessionDAO;import javax.servlet.Filter;import java.util.ArrayList;import java.util.HashMap;import java.util.LinkedHashMap;import java.util.Map;/*** * 引入RedisSessionDAO和RedisCacheManager , 为了解决shiro的权限数据和会话信息能保存到redis中 , 实现会话共享 。*/@Configurationpublic class ShiroConfig {@AutowiredJwtFilter jwtFilter;/*** 重建了SessionManager** @param redisSessionDAO* @return*/@Beanpublic SessionManager sessionManager(RedisSessionDAO redisSessionDAO) {DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();// inject redisSessionDAOsessionManager.setSessionDAO(redisSessionDAO);return sessionManager;}/*** 重建DefaultWebSecurityManager* DefaultWebSecurityManager中为了关闭shiro自带的session方式 , 我们需要设置为false ,* 这样用户就不再能通过session方式登录shiro 。 后面将采用jwt凭证登录 。** @param accountRealm* @param sessionManager* @param redisCacheManager* @return*/@Beanpublic DefaultWebSecurityManager securityManager(LoginReaIm loginReaIm,AccountReaIm accountRealm,SessionManager sessionManager,RedisCacheManager redisCacheManager) {DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();//inject sessionManagersecurityManager.setSessionManager(sessionManager);// inject redisCacheManagersecurityManager.setCacheManager(redisCacheManager);/** 关闭shiro自带的session , 详情见文档* #SessionManagement-StatelessApplications%28Sessionless%29*/DefaultSubjectDAO subjectDAO = new DefaultSubjectDAO();DefaultSessionStorageEvaluator defaultSessionStorageEvaluator = new DefaultSessionStorageEvaluator();defaultSessionStorageEvaluator.setSessionStorageEnabled(false);subjectDAO.setSessionStorageEvaluator(defaultSessionStorageEvaluator);securityManager.setSubjectDAO(subjectDAO);/*** 多个LoginReaIm*/ArrayList
推荐阅读
- 人脸识别设备主板如何选型 软硬整合大幅缩短开发时间
- 三星公布2021年款电视阵容:屏幕技术大升级 整合Google Duo等服务
- 整合零代码+AI+云原生技术,「速优云」布局智慧教培和智慧社区
- 整合K12业务 在线教育企业跟谁学升级旗下高途课堂
- 全力推进手机×AIoT战略 小米宣布整合成立三大部门:直接向雷军汇报
- SpringBoot常用注解
- 阿里爆款SpringBoot项目实战PDF+源码+视频分享
- 微软已经完成将Pinterest整合到Edge收藏夹的工作
- 微软Reunion首个0.1.0预览版发布 整合统一Win32和UWP API
- 全网最深分析:SpringBoot MVC自动配置失效的原因