SpringBoot集成 Shiro
备份自用
- pom.xml
<!-- shiro--><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.3.2</version></dependency>
- ShiroConfig
package com.school.service.config;import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.mgt.SecurityManager;
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;/*** Shiro配置类*/
@Configuration
public class ShiroConfig {@Bean(name = "shiroFilter")public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager){ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();shiroFilterFactoryBean.setSecurityManager(securityManager);shiroFilterFactoryBean.setLoginUrl("/school/goToLogin");//设置登录页面shiroFilterFactoryBean.setUnauthorizedUrl("/school/goToLogin");//权限不足跳转页面,这个在Default过滤器中设置无效,具体看 https://blog.csdn.net/bicheng4769/article/details/86680955Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();// <!-- authc:所有url都必须认证通过才可以访问; anon:所有url都都可以匿名访问-->filterChainDefinitionMap.put("/service/school/**", "anon");filterChainDefinitionMap.put("/swagger-ui.html", "anon");filterChainDefinitionMap.put("/swagger-resources", "anon");filterChainDefinitionMap.put("/v2/api-docs", "anon");filterChainDefinitionMap.put("/webjars/springfox-swagger-ui/**", "anon");filterChainDefinitionMap.put("/configuration/security", "anon");filterChainDefinitionMap.put("/configuration/ui", "anon");filterChainDefinitionMap.put("/service/article/**", "authc");filterChainDefinitionMap.put("/service/chat/**", "authc");filterChainDefinitionMap.put("/service/diary/**", "authc");filterChainDefinitionMap.put("/service/file/**", "authc");filterChainDefinitionMap.put("/service/problem/**", "authc");filterChainDefinitionMap.put("/service/team-article/**", "authc");filterChainDefinitionMap.put("/service/team/**", "authc");filterChainDefinitionMap.put("/service/user/**", "authc");filterChainDefinitionMap.put("/service/user-friend/**", "authc");filterChainDefinitionMap.put("/service/user-info/**", "authc");filterChainDefinitionMap.put("/service/widget/**", "authc");//主要这行代码必须放在所有权限设置的最后,不然会导致所有 url 都被拦截 剩余的都需要认证filterChainDefinitionMap.put("/**", "anon");shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);return shiroFilterFactoryBean;}@Beanpublic SecurityManager securityManager(){DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();defaultWebSecurityManager.setRealm(myRealm());return defaultWebSecurityManager;}@Beanpublic MyRealm myRealm (){MyRealm myRealm = new MyRealm();return myRealm;}}
- 自定义Realm
package com.school.service.config;import com.school.service.entity.User;
import com.school.service.service.IUserService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.springframework.beans.factory.annotation.Autowired;import java.util.HashSet;
import java.util.Set;/*** 自定义Realm*/
public class MyRealm extends AuthorizingRealm {@AutowiredIUserService userService;@Override //权限认证,发放权限protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {String username = (String) SecurityUtils.getSubject().getPrincipal();SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();Set<String> stringSet = new HashSet<>();stringSet.add("user:show");stringSet.add("user:admin");info.setStringPermissions(stringSet);return info;}@Override //身份认证,验证登录protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {System.out.println("-------身份认证方法--------");String userCode = (String) authenticationToken.getPrincipal();String userPwd = new String((char[]) authenticationToken.getCredentials());//根据用户名从数据库获取密码User user = userService.getByUserCode(userCode);String password = null;if (user != null)password = user.getPassword();if (userCode == null || user == null) {throw new AccountException("用户名不正确");} else if (!userPwd.equals(password )) {throw new AccountException("密码不正确");}return new SimpleAuthenticationInfo(userCode, password,getName());}
}
- 注册时密码加盐加密
注册的时候将密码加密存储到数据库。
/*** 获取加密密码* @param password* @return*/private static String hashAlgorithmName = "MD5"; //加密方式private static final int hashIterations = 2; //加密的次数private static final String salt = new SecureRandomNumberGenerator().nextBytes().toHex(); //盐
// private static final String salt = "6LCi5pmo5ZWK";public static String getMD5Passwoed(String password){//加密SimpleHash simpleHash = new SimpleHash(hashAlgorithmName, password, salt, hashIterations);return simpleHash.toString();}
登录时
String getPassword = getMD5Passwoed(password);
// 在认证提交前准备 token(令牌)
UsernamePasswordToken token = new UsernamePasswordToken(userCode, getPassword);
注册时
String encryptionPassword = getMD5Passwoed(password);//获取加密密码
//保存到数据库
SpringBoot集成 Shiro相关推荐
- springboot集成shiro 前后端分离 统一处理shiro异常
springboot集成shiro 前后端分离 统一处理shiro异常 参考文章: (1)springboot集成shiro 前后端分离 统一处理shiro异常 (2)https://www.cnbl ...
- SpringBoot集成Shiro安全框架
SpringBoot集成Shiro安全框架 1.shiro的定义 2.SpringBoot集成shiro的步骤 3.完成的效果 1.shiro的定义 1.shiro的作用 认证.授权.加密.会话管理. ...
- springboot集成shiro实现用户登录认证
Apache Shiro 是一个功能强大且易于使用的Java安全框架,可执行身份验证.授权.加密和会话管理.使用Shiro易于理解的API,您可以快速轻松地保护任何应用程序-从最小的移动应用程序到最大 ...
- apache shiro jar包_只需要6个步骤,springboot集成shiro,并完成登录
小Hub领读: 导入jar包,配置yml参数,编写ShiroConfig定义DefaultWebSecurityManager,重写Realm,编写controller,编写页面,一气呵成.搞定,是个 ...
- Springboot集成Shiro+Redis后,@Transactional注解不起作用
为什么80%的码农都做不了架构师?>>> 使用Springboot构建 mybatis+Shiro+Redis+Druid 的前后端分离web项目, 具体可以参考博客https ...
- (课堂作业)spring-boot集成shiro的步骤及代码解析
1.创建一个简单的Springboot项目,包含shiro和mybatis-plus. 2.集成shiro 2.1引入依赖 <dependency><groupId>org.a ...
- 【Springboot学习】SpringBoot集成Shiro前后端分离使用redis做缓存【个人博客搭建】
shiro-redis 目录 shiro-redis 下载 shiro-core/jedis 版本对比图 使用前 如何配置? 设置文件 Redis 独立 Redis哨兵 Redis 集群 Spring ...
- Springboot 集成 Shiro 入门学习
文章目录 Shiro概述 主要特征 shiro如何工作 官方快速开始代码分析 Springboot整合Shiro 导入依赖 创建配置类ShiroConfig 创建Realm 创建控制器 创建静态页面 ...
- SpringBoot集成Shiro前后端分离使用redis做缓存
文章目录 一 .shiro介绍 1.基础介绍 2.基本功能点 3.基本流程图 二. 常用的权限管理表关系 2.1. 表组成 2.2. 表结构 三.实战案例 3.1. 案例介绍 3.2. 依赖 3.3. ...
- SpringBoot集成shiro框架
一 介绍: 主要用到SpringBoot.hibernate.swagger.mybatis.shiro.maven等技术. 项目使用idea.mysql数据库开发,idea要安装lombok插件否则 ...
最新文章
- sql 增加自增列 耗时长_SQLServer为已有数据的表添加一个自增列
- layer,一个可以让你想到即可做到的javascript弹窗(层)解决方案
- 前端面试问题(HTML5+Http+web)
- 微服务架构(二):融入微服务的企业集成架构
- 敏捷开发任务看板_看板方法的进化论:从丰田精益方法到敏捷研发
- php smarty配置文件,Smarty配置文件
- 每日算法系列【LeetCode 354】俄罗斯套娃信封问题
- apache poi使用例_Apache POI使用详解
- 刘意JavaSE 学习笔记 Day1-Day6——环境配置,基本语法
- 对称加密算法(DES、3DES、AES)
- Python生成自定义表头Excel
- 用Python的turtle画一个正方形圆形五角星
- 如何使用navicat premium打开外部.sql文件
- css改变透明背景png图片的图标颜色
- 阿里云API请求签名失败的解决办法
- 游戏定制开发自建团队好吗?
- Arthas基本命令说明
- 北大资源燕南业主总群 326680907
- lecture8-RNN的训练方法之二三
- What、Why、How?解读Webpack官方文档
热门文章
- python浮雕图片_python图像数据增强——imgaug (二)
- jvm gc监控分析常用命令
- skywalking调研相关资料整理
- 腾讯优测干货精选| 安卓开发新技能Get -常用必备小工具汇总
- 分形与数据结构第一篇(神奇的色子)
- protobuf使用错误总结
- 刺客信条起源计算机内存不足,刺客信条起源需要什么配置能玩?最低/推荐配置需求介绍...
- 如何使用Selenium-Grid
- hal库开启中断关中断_STM32 HAL库学习系列第9篇---NVIC按键外部中断函数
- 正经人一辈子都用不到的 JavaScript 方法总结 (二)