# springboot-shiro **Repository Path**: MarkPolaris/springboot-shiro ## Basic Information - **Project Name**: springboot-shiro - **Description**: springboot整合shiro - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-08-22 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #### Shiro核心API + Subject: 用户主体(把操作交给SecurityManager) + SecurityManager: 安全管理器(关联Realm) + Realm:Shiro连接数据的桥梁 #### Springboot整合Shiro 1. 导入依赖 ```xml org.apache.shiro shiro-spring 1.4.0 ``` 2. 写一个Realm.java ```java package com.mark.springbootshiro.shiro; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authz.AuthorizationInfo; import org.apache.shiro.realm.AuthorizingRealm; import org.apache.shiro.subject.PrincipalCollection; /** * @Author: MARK * @Date: 2019/8/22 08:07 * @Version: 1.0.0 * @Description: 自定义Realm */ public class UserRealm extends AuthorizingRealm { @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { System.out.println("执行授权逻辑"); return null; } @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { System.out.println("执行认证逻辑"); return null; } } ``` 3. 编写配置类 ShiroConfig.java ```java package com.mark.springbootshiro.shiro; import org.apache.shiro.mgt.DefaultSecurityManager; import org.apache.shiro.spring.web.ShiroFilterFactoryBean; import org.apache.shiro.web.mgt.DefaultWebSecurityManager; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @Author: MARK * @Date: 2019/8/22 08:05 * @Version: 1.0.0 * @Description: Shiro配置类 */ @Configuration public class ShiroConfig { /** * @return * @create: 2019/8/22 * @author MARK * @Description: 创建ShiroFilterFactory */ public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultSecurityManager securityManager){ ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); //设置安全管理器 shiroFilterFactoryBean.setSecurityManager(securityManager); return shiroFilterFactoryBean; } /** * @return * @create: 2019/8/22 * @author MARK * @Description: 创建DefaultWebSecurityManager */ @Bean(name = "securityManager") public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm){ DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); //关联Realm securityManager.setRealm(userRealm); return securityManager; } /** * @return * @create: 2019/8/22 * @author MARK * @Description: 创建Realm 放入spring中 */ @Bean(name = "userRealm") public UserRealm userRealm(){ return new UserRealm(); } } ``` 4. 写一个接口测试下环境 ```java package com.mark.springbootshiro.controller; import com.mark.springbootshiro.common.Result; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @Author: MARK * @Date: 2019/8/22 08:23 * @Version: 1.0.0 * @Description: */ @RestController @Slf4j @CrossOrigin @RequestMapping(value = "/admin", produces = {"application/json;charset=UTF-8"}) public class UserController { @GetMapping("/admin") public Result getAll(){ log.info("进来了"); return Result.ok("成功"); } } ``` 5. 运行结果 ![整合环境测试](.README_images/fc723397.png)