备份自用

  1. pom.xml
<!--        shiro--><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.3.2</version></dependency>
  1. 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;}}
  1. 自定义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());}
}
  1. 注册时密码加盐加密

注册的时候将密码加密存储到数据库。

/*** 获取加密密码* @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相关推荐

  1. springboot集成shiro 前后端分离 统一处理shiro异常

    springboot集成shiro 前后端分离 统一处理shiro异常 参考文章: (1)springboot集成shiro 前后端分离 统一处理shiro异常 (2)https://www.cnbl ...

  2. SpringBoot集成Shiro安全框架

    SpringBoot集成Shiro安全框架 1.shiro的定义 2.SpringBoot集成shiro的步骤 3.完成的效果 1.shiro的定义 1.shiro的作用 认证.授权.加密.会话管理. ...

  3. springboot集成shiro实现用户登录认证

    Apache Shiro 是一个功能强大且易于使用的Java安全框架,可执行身份验证.授权.加密和会话管理.使用Shiro易于理解的API,您可以快速轻松地保护任何应用程序-从最小的移动应用程序到最大 ...

  4. apache shiro jar包_只需要6个步骤,springboot集成shiro,并完成登录

    小Hub领读: 导入jar包,配置yml参数,编写ShiroConfig定义DefaultWebSecurityManager,重写Realm,编写controller,编写页面,一气呵成.搞定,是个 ...

  5. Springboot集成Shiro+Redis后,@Transactional注解不起作用

    为什么80%的码农都做不了架构师?>>>    使用Springboot构建 mybatis+Shiro+Redis+Druid 的前后端分离web项目, 具体可以参考博客https ...

  6. (课堂作业)spring-boot集成shiro的步骤及代码解析

    1.创建一个简单的Springboot项目,包含shiro和mybatis-plus. 2.集成shiro 2.1引入依赖 <dependency><groupId>org.a ...

  7. 【Springboot学习】SpringBoot集成Shiro前后端分离使用redis做缓存【个人博客搭建】

    shiro-redis 目录 shiro-redis 下载 shiro-core/jedis 版本对比图 使用前 如何配置? 设置文件 Redis 独立 Redis哨兵 Redis 集群 Spring ...

  8. Springboot 集成 Shiro 入门学习

    文章目录 Shiro概述 主要特征 shiro如何工作 官方快速开始代码分析 Springboot整合Shiro 导入依赖 创建配置类ShiroConfig 创建Realm 创建控制器 创建静态页面 ...

  9. SpringBoot集成Shiro前后端分离使用redis做缓存

    文章目录 一 .shiro介绍 1.基础介绍 2.基本功能点 3.基本流程图 二. 常用的权限管理表关系 2.1. 表组成 2.2. 表结构 三.实战案例 3.1. 案例介绍 3.2. 依赖 3.3. ...

  10. SpringBoot集成shiro框架

    一 介绍: 主要用到SpringBoot.hibernate.swagger.mybatis.shiro.maven等技术. 项目使用idea.mysql数据库开发,idea要安装lombok插件否则 ...

最新文章

  1. sql 增加自增列 耗时长_SQLServer为已有数据的表添加一个自增列
  2. layer,一个可以让你想到即可做到的javascript弹窗(层)解决方案
  3. 前端面试问题(HTML5+Http+web)
  4. 微服务架构(二):融入微服务的企业集成架构
  5. 敏捷开发任务看板_看板方法的进化论:从丰田精益方法到敏捷研发
  6. php smarty配置文件,Smarty配置文件
  7. 每日算法系列【LeetCode 354】俄罗斯套娃信封问题
  8. apache poi使用例_Apache POI使用详解
  9. 刘意JavaSE 学习笔记 Day1-Day6——环境配置,基本语法
  10. 对称加密算法(DES、3DES、AES)
  11. Python生成自定义表头Excel
  12. 用Python的turtle画一个正方形圆形五角星
  13. 如何使用navicat premium打开外部.sql文件
  14. css改变透明背景png图片的图标颜色
  15. 阿里云API请求签名失败的解决办法
  16. 游戏定制开发自建团队好吗?
  17. Arthas基本命令说明
  18. 北大资源燕南业主总群 326680907
  19. lecture8-RNN的训练方法之二三
  20. What、Why、How?解读Webpack官方文档

热门文章

  1. python浮雕图片_python图像数据增强——imgaug (二)
  2. jvm gc监控分析常用命令
  3. skywalking调研相关资料整理
  4. 腾讯优测干货精选| 安卓开发新技能Get -常用必备小工具汇总
  5. 分形与数据结构第一篇(神奇的色子)
  6. protobuf使用错误总结
  7. 刺客信条起源计算机内存不足,刺客信条起源需要什么配置能玩?最低/推荐配置需求介绍...
  8. 如何使用Selenium-Grid
  9. hal库开启中断关中断_STM32 HAL库学习系列第9篇---NVIC按键外部中断函数
  10. 正经人一辈子都用不到的 JavaScript 方法总结 (二)