当前位置: 首页 > news >正文

shiro使用——整合spring

shiro使用——整合spring

1. 引入相关配置

       <dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.9.1</version></dependency>

2. 自定义Realm类 继承AuthorizingRealm 并重写相对应的方法

  1. 获取用户身份信息
  2. 调用业务层获取用户信息 (数据库)
  3. 非空判断,将数据封装返回
@Component
public class MyRealm extends AuthorizingRealm {@Autowiredprivate UserMapper userMapper;//    授权@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {return null;}
//  登录@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {//1 获取用户身份信息String name = authenticationToken.getPrincipal().toString();//2 调用业务层获取用户信息 (数据库)User user = userMapper.selectById(name);//3 非空判断,将数据封装返回if (user != null){SimpleAuthenticationInfo sai = new SimpleAuthenticationInfo(name, user.getPassword(), ByteSource.Util.bytes("salt"), MyRealm.class.getName());return sai;}return null;}
}

3. 编写shiro配置类

配置securityManager

  1. 创建defaultWebSecurityManager 对象
  2. 创建加跨对象,设置相关属性
    2.1采用md5加密
    2.2 迭代加密次数
  3. 将加对象存储到myRealm中
  4. 将myRealm存AdefaultWebSecurityManager 对象
  5. 返回

配置shiro内置过滤器拦截范围

  1. 需要认证
  2. 不需要认证
@Configuration
public class shiroConfig {@Autowiredprivate MyRealm myRealm;@Beanpublic DefaultWebSecurityManager defaultWebSecurityManager() {DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();hashedCredentialsMatcher.setHashAlgorithmName("md5");hashedCredentialsMatcher.setHashIterations(3);myRealm.setCredentialsMatcher(hashedCredentialsMatcher);defaultWebSecurityManager.setRealm(myRealm);ThreadContext.bind(defaultWebSecurityManager);return defaultWebSecurityManager;}//配置shiro内置过滤器拦截范围@Beanpublic DefaultShiroFilterChainDefinition shiroFilterChainDefinition(){DefaultShiroFilterChainDefinition defaultShiroFilterChainDefinition = new DefaultShiroFilterChainDefinition();
//        需要认证defaultShiroFilterChainDefinition.addPathDefinition("/login","anon");defaultShiroFilterChainDefinition.addPathDefinition("/user","anon");
//        不需要认证defaultShiroFilterChainDefinition.addPathDefinition("/**","authc");return defaultShiroFilterChainDefinition;}}

4. 回到业务层通过subject.login()方法验证登录

	 Subject subject = SecurityUtils.getSubject();AuthenticationToken token = new UsernamePasswordToken(user.getUsername(),user.getPassword());try {subject.login(token);}catch (Exception e){e.printStackTrace();return ComResult.error("登录失败");}return ComResult.success("登录成功");
http://www.lryc.cn/news/14384.html

相关文章:

  • 2023-02-20 leetcode-AccountsMerge
  • 中国高速公路行业市场规模及未来发展趋势
  • 佳能iC MF645CX彩色激光多功能打印机报E302-0001故障码检修
  • 加密越来越简单——用JavaScript实现数据加密和解密
  • 线程池的使用场景
  • 图像分割算法
  • 《mysql技术内幕:innodb存储引擎》笔记
  • windows与linux系统ntp服务器配置
  • html常用font-family设置字体样式
  • 数据库事务AICD以及隔离级别
  • (4)VScode之ssh基础配置
  • springcloud-1环境搭建、service provider
  • 光谱仪工作过程及重要参数定义
  • W800|iot|HLK-W800-KIT-PRO|AliOS|阿里云| |官方demo|学习(1):板载AliOS系统快速上手
  • 字节终面,一道Linux题难住我了
  • 三、NetworkX工具包实战2——可视化【CS224W】(Datawhale组队学习)
  • 【MySQL】MySQL 架构
  • Python日期时间模块
  • 学以致用——植物信息录入1.0(selenium+pandas+os+tkinter)
  • 什么是压敏电阻
  • Leetcode.901 股票价格跨度
  • vue入门(四)组件基础,$emits简单用法
  • VBA提高篇_27 OptionBOX_CheckBox_Frame_Image_VBA附加控件
  • STM32开发(11)----CubeMX配置独立看门狗(IWDG)
  • 医疗方案 | 星辰天合入选“2022智慧新医信优秀解决方案”
  • 【系统服务实战】tomcat服务的安装实战
  • 【图文详解】Unity存储游戏数据的几种方法
  • SESAM 安装教程
  • 语言文件操作
  • Java面试题--熔断和降级的区别