本文源码:GitHub·点这里| | GitEE·点这里
一,Shiro简介
1,基础概念
Apache Shiro是一个强大且易用的Java安全框架,执行身份验证,授权,密码和会话管理。作为一款安全框架Shiro的设计相当巧妙.Shiro的应用不依赖任何容器,它不仅可以在JavaEE下使用,还可以应用在Java se环境中。
2,核心角色
1)主题:认证主体
代表当前系统的使用者,就是用户,在Shiro的认证中,认证主体通常就是用户名和密码,或者其他用户相关的唯一标识。
2) SecurityManager:安全管理器
Shiro架构中最核心的组件,通过它可以协调其他组件完成用户认证和授权。实际上,SecurityManager就是Shiro框架的控制器。
3)域:域对象
定义了访问数据的方式,用来连接不同的数据源,如:关系数据库,配置文件等等。
3,核心理念
Shiro自己不维护用户和权限,通过主题用户主体和领域域对象的注入,完成用户的认证和授权。
二、整合SpringBoot2框架
1,核心依赖
<代码> & lt; dependency> & lt; groupId> org.apache.shiro & lt; artifactId> shiro-core & lt; version> 1.4.0 & lt;/dependency> & lt; dependency> & lt; groupId> org.apache.shiro & lt; artifactId> shiro-spring & lt; version> 1.4.0 & lt;/dependency> 代码>
2, Shiro核心配置
<代码> @ configuration 公开课ShiroConfig {/* * *会话管理器:会话管理 *即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中; *会话可以是普通java se环境的,也可以是如网络环境的; */@ bean (“sessionManager”) 公共SessionManager SessionManager () { DefaultWebSessionManager sessionManager=new DefaultWebSessionManager ();//设置会话过期时间 sessionManager。setGlobalSessionTimeout (60 * 60 * 1000); sessionManager.setSessionValidationSchedulerEnabled(真正的);//去掉shiro登录时url里的JSESSIONID sessionManager.setSessionIdUrlRewritingEnabled(假); 返回sessionManager; }/* * * SecurityManager:安全管理器 */@ bean (“securityManager”) 公共SecurityManager SecurityManager (UserRealm UserRealm, SessionManager SessionManager) { DefaultWebSecurityManager securityManager=new DefaultWebSecurityManager (); securityManager.setSessionManager (sessionManager); securityManager.setRealm (userRealm); 返回securityManager; }/* * * ShiroFilter是整个Shiro的入口点,用于拦截需要安全控制的请求进行处理 */@ bean (“shiroFilter”) 公共ShiroFilterFactoryBean shiroFilter (SecurityManager SecurityManager) { ShiroFilterFactoryBean shiroFilter=new ShiroFilterFactoryBean (); shiroFilter.setSecurityManager (securityManager); shiroFilter.setLoginUrl ("/userLogin "); shiroFilter.setUnauthorizedUrl (“/?; String> Map<字符串;,filterMap=new LinkedHashMap<的在(); filterMap。put ("/userLogin”、“不久”); shiroFilter.setFilterChainDefinitionMap (filterMap); 返回shiroFilter; }/* * *管理Shiro中一些bean的生命周期 */@ bean (“lifecycleBeanPostProcessor”) 公共LifecycleBeanPostProcessor LifecycleBeanPostProcessor () { 返回新LifecycleBeanPostProcessor (); }/* * *扫描上下文,寻找所有的Advistor(通知器) *将这些顾问应用到所有符合切入点的Bean中。 */@ bean 公共DefaultAdvisorAutoProxyCreator DefaultAdvisorAutoProxyCreator () { DefaultAdvisorAutoProxyCreator proxyCreator=new DefaultAdvisorAutoProxyCreator (); proxyCreator.setProxyTargetClass(真正的); 返回proxyCreator; }/* * *匹配所有加了Shiro认证注解的方法 */@ bean 公共AuthorizationAttributeSourceAdvisor AuthorizationAttributeSourceAdvisor (SecurityManager SecurityManager) { AuthorizationAttributeSourceAdvisor顾问=new AuthorizationAttributeSourceAdvisor (); advisor.setSecurityManager (securityManager); 返回顾问; } }代码>
3,域对象配置
<代码> @ component 公开课UserRealm延伸AuthorizingRealm { @ 私人SysUserMapper SysUserMapper; @ 私人SysMenuMapper SysMenuMapper;/* * *授权(验证权限时调用) *获取用户权限集合 */@Override 公共AuthorizationInfo doGetAuthorizationInfo (PrincipalCollection主体){ SysUserEntity用户=(SysUserEntity) principals.getPrimaryPrincipal (); 如果(用户==null) { 把新UnknownAccountException(“账号不存在”); } ListSpringBoot2整合Shiro框架,实现用户权限管理