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

启明星辰春招面试题

《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token=1860256701&lang=zh_CN

5000篇网安资料库https://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247486065&idx=2&sn=b30ade8200e842743339d428f414475e&chksm=c0e4732df793fa3bf39a6eab17cc0ed0fca5f0e4c979ce64bd112762def9ee7cf0112a7e76af&scene=21#wechat_redirect


苦逼的技术,能干销售就去干销售吧,毕竟年轻不干,35+还是得去干,要不你就专研技术不可替代。那就看看下面这些关于Shiro相关的面试题你懂不?

1. Shiro 的 CredentialsMatcher 有什么作用?如何实现自定义密码加密策略?

答案

  • 作用:用于验证用户提交的凭证(如密码)与存储的凭证是否匹配。

  • 自定义加密步骤
    1. 实现 CredentialsMatcher

    public class BCryptMatcher implements CredentialsMatcher {  public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {  String inputPassword = new String((char[]) token.getCredentials());  String storedHash = (String) info.getCredentials();  return BCrypt.checkpw(inputPassword, storedHash);  }  
    }  
    
    1. 配置 Realm:

    [main]  
    myRealm = com.example.MyRealm  
    myRealm.credentialsMatcher = com.example.BCryptMatcher  
    
2. Shiro 的 CacheManager 如何与 Redis 集成以提升性能?

答案

  1. 使用 RedisCacheManager

public class RedisCacheManager implements CacheManager {  private RedisTemplate<String, Object> redisTemplate;  @Override  public <K, V> Cache<K, V> getCache(String name) {  return new RedisCache<>(name, redisTemplate);  }  
}  
  1. 配置 Shiro:

[main]  
cacheManager = com.example.RedisCacheManager  
securityManager.cacheManager = $cacheManager  
  1. 优势
    • 减少数据库查询压力。

    • 支持分布式环境下的缓存一致性。

3. 解释 Shiro 的 ThreadContext 及其在多线程环境下的潜在问题。

答案

  • ThreadContext:基于 ThreadLocal 存储当前线程的 Shiro 状态(如 Subject、Session)。

  • 多线程问题
    • 线程池复用:若主线程将 Subject 传递给子线程,可能导致状态污染或内存泄漏。

    • 解决方案
      1. 在子线程中手动绑定/解绑 Subject:

      Subject subject = SecurityUtils.getSubject();  
      new Thread(() -> {  ThreadContext.bind(subject);  // 执行逻辑  ThreadContext.remove();  
      }).start();  
      
      1. 使用 InheritableThreadLocal 配置(需谨慎,可能泄露敏感信息)。


4. Shiro 的 AuthorizationInfoAuthenticationInfo 有什么区别?

答案

  • AuthenticationInfo
    • 用于认证阶段,存储用户身份凭证(如密码、盐值、哈希迭代次数)。

    • 示例:SimpleAuthenticationInfo(username, hashedPassword, salt, realmName)

  • AuthorizationInfo
    • 用于授权阶段,存储用户的角色和权限集合。

    • 示例:SimpleAuthorizationInfo(roles, permissions)

  • 关键区别
    • AuthenticationInfo 关注“用户是谁”,AuthorizationInfo 关注“用户能做什么”。

5. Shiro 的 SessionDAO 接口设计有什么意义?如何实现会话持久化到数据库?

难度:⭐⭐⭐⭐
考察维度:会话管理、持久化设计
答案

  • 意义:解耦会话存储逻辑,支持灵活扩展(如 Redis、JDBC、Memory)。

  • JDBC 持久化实现
    1. 创建表结构(如 shiro_sessions 表)。

    2. 实现 JdbcSessionDAO

    public class MyJdbcSessionDAO extends JdbcSessionDAO {  @Override  protected Serializable doCreate(Session session) {  Serializable sessionId = generateSessionId(session);  assignSessionId(session, sessionId);  insertSession(session); // 插入数据库  return sessionId;  }  // 重写 read/update/delete 方法  
    }  
    
    1. 配置 SessionManager

    [main]  
    sessionDAO = com.example.MyJdbcSessionDAO  
    securityManager.sessionManager.sessionDAO = $sessionDAO  
    
6. 如何利用 Shiro 的 EventBus 机制实现安全审计日志?

难度:⭐⭐⭐⭐⭐
考察维度:事件驱动、审计日志
答案

  1. 监听 Shiro 事件(如登录成功、授权失败):

public class AuditLogListener implements EventListener {  @Subscribe  public void onLoginSuccess(LoginSuccessEvent event) {  Subject subject = event.getSubject();  log.info("User {} logged in from IP {}", subject.getPrincipal(), subject.getSession().getHost());  }  
}  
  1. 注册监听器

EventBus eventBus = securityManager.getEventBus();  
eventBus.register(new AuditLogListener());  
  1. 应用场景
    • 记录异常登录尝试。

    • 监控敏感操作(如权限变更)。

相关文章:

启明星辰春招面试题

《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…...

边缘计算革命:重构软件架构的范式与未来

摘要 边缘计算通过将算力下沉至网络边缘&#xff0c;正在颠覆传统中心化软件架构的设计逻辑。本文系统分析了边缘计算对软件架构的范式革新&#xff0c;包括分布式分层架构、实时资源调度、安全防护体系等技术变革&#xff0c;并结合工业物联网、智慧医疗等场景案例&#xff0c…...

【读点论文】Chain Replication for Supporting High Throughput and Availability

在分布式系统中&#xff0c;强一致性往往和高可用、高吞吐是矛盾的。比如传统的关系型数据库&#xff0c;其保证了强一致性&#xff0c;但往往牺牲了可用性和吞吐量。而像 NoSQL 数据库&#xff0c;虽然其吞吐量、和扩展性很高&#xff0c;但往往只支持最终一致性&#xff0c;无…...

Servlet、Servlet的5个接口方法、生命周期、以及模拟实现 HttpServlet 来写接口的基本原理

DAY15.1 Java核心基础 Servlet Servlet是一个接口&#xff0c;是java的基础&#xff0c;java之所以编写web的程序&#xff0c;接收请求并响应&#xff0c;就是因为Sevlet接口 Java 类实现了Servlet接口的时候就可以接收并响应请求&#xff0c;成为web服务器 Web服务器就是接…...

深入了解 C# 中的 LINQ:功能、语法与应用解析

1. 什么是 LINQ&#xff1f; LINQ&#xff08;Language Integrated Query&#xff0c;语言集成查询&#xff09;是 C# 和其他 .NET 语言中的一种强大的查询功能&#xff0c;它允许开发者在语言中直接执行查询操作。LINQ 使得开发者可以使用 C# 语法&#xff08;或 VB.NET&…...

贝叶斯公式的一个直观解释

E E E&#xff1a;抓到娃娃 H H H&#xff1a;坐地铁 H ˉ \bar H Hˉ&#xff1a;坐公交 P ( E ) P ( H ) P ( E ∣ H ) P ( H ‾ ) P ( E ∣ H ‾ ) P({E}) P({H}) P({E} \mid {H}) {P}(\overline{{H}}) {P}({E} \mid \overline{{H}}) P(E)P(H)P(E∣H)P(H)P(E∣H) P (…...

Java 大视界 -- Java 大数据分布式计算中的通信优化与网络拓扑设计(145)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

reconstruct_3d_object_model_for_matching例子

文章目录 1.获取om3文件2.准备可视化3.准备3D可视化4.读取3D模型5.显示成对注册结果16.显示成对注册结果27.联合注册模型8.处理图像8.1子采样8.2 图像计算与平滑8.3 三角测量 9.基于表面做3D匹配10.评估模型准确度10.1 在场景中找到模型10.2 计算模型和场景之间的距离 11.立体系…...

【JavaWeb学习Day27】

Tlias前端 员工管理 条件分页查询&#xff1a; 页面布局 搜索栏&#xff1a; <!-- 搜索栏 --><div class"container"><el-form :inline"true" :model"searchEmp" class"demo-form-inline"><el-form-item label…...

Webrtc编译官方示例实现视频通话

Webrtc编译官方示例实现视频通话 前言 webrtc官网demo中给了一个供我们学习和应用webrtc的一个很好的例子&#xff1a;peerconnection&#xff0c;这期我们就来编译和运行下这个程序看看视频通话的效果以。 1、打开源码工程 继上期源码编译完成后&#xff0c;我们使用vs打开…...

编程语言选择分析:C#、Rust、Go 与 TypeScript 编译器优化

编程语言选择分析&#xff1a;C#、Rust、Go 与 TypeScript 编译器优化 在讨论编程语言的选择时&#xff0c;特别是针对微软的 C# 和 Rust&#xff0c;以及谷歌的 Go 语言&#xff0c;以及微软试图通过 Go 来拯救 TypeScript 编译器的问题&#xff0c;我们可以从多个角度来分析和…...

信息学奥赛一本通 1610:玩具装箱 | 洛谷 P3195 [HNOI2008] 玩具装箱

【题目链接】 ybt 1610&#xff1a;玩具装箱 洛谷 P3195 [HNOI2008] 玩具装箱 【题目考点】 1. 动态规划&#xff1a;斜率优化动规 斜率优化动规模板题&#xff1a;信息学奥赛一本通 1607&#xff1a;【 例 2】任务安排 2 | 洛谷 P10979 任务安排 2 【解题思路】 玩具长度…...

数仓工具—Hive语法之不同纬度聚合

不同纬度聚合 提到不同纬度聚合,大家想到的肯定是grouping sets,或者是cube和rollup 其实这些我们之前都讲过,可以看看之前的文章 数仓工具—Hive语法之cube和rollup 数仓工具—Hive语法之grouping sets 但是我们今天遇到的问题是,使用的工具不支持grouping sets,既然…...

领码科技:在低代码技术浪潮中的分享与探索

前言&#xff1a; 25年的职业生涯&#xff0c;赋予了我深厚的技术积累与实践经验。从武汉大学的工测系毕业&#xff0c;到央企副总工的职位&#xff0c;我始终站在IT浪潮的最前沿。然而&#xff0c;离开企业后&#xff0c;我并未停止前行的脚步。从2024年11月起&#xff0c;我选…...

大数据学习(80)-数仓分层

&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一…...

刘强东突然发声:不该用算法压榨最底层兄弟!东哥,真正的人民企业家

今天忙了一天&#xff0c;很累&#xff0c;准备睡觉的时候&#xff0c;看到网上盛传的刘强东的朋友圈&#xff0c;东哥又在朋友圈发文了。 说实话&#xff0c;看完之后&#xff0c;感动&#xff0c;真的感动。 尤其是当我看到这两句话的时候。 1、我们所学的知识、商业模式、技…...

Java 记忆链表,LinkedList 的升级版

文章目录 记忆链表 MemoryLinkedList实战源代码 众所周知&#xff0c;ArrayList 和 LinkedList 是 Java 集合中两个基本的数据结构&#xff0c;对应数据结构理论中的数组和链表。但在这两个数据结构&#xff0c;开发者们通常使用 ArrayList&#xff0c;而不使用 LinkedList。JD…...

【构建CV图像识别系统】从传统方法到深度学习

目录 1. 图像的基本概念1.1 像素与色彩1.2 过滤与卷积 2. 图像分类与检测3. 图像特征的提取3.1 全局特征3.2 局部特征3.2.1 边缘&#xff08;Edge&#xff09;3.2.2 角点&#xff08;Corner&#xff09;3.2.3 SIFT 特征 4. 传统方法与深度学习在图像识别中的应用4.1 基于传统方…...

.net core集成MQTT服务端

程序作为MQTT的服务端&#xff0c;也是WebApi 接口地址&#xff0c;在Web页面中MQTTJS用的是Websocker协议&#xff0c;在Winfrom中用MQTT协议。导致程序需要启动两个端口。直接上代码 创建服务 引用包&#xff1a;MQTTnet&#xff0c;MQTTnet.AspNetCore&#xff0c;这包最新…...

poetry安装与使用

文章目录 安装方法创建虚拟环境其他常用命令从 poetry.lock 中安装第三方依赖包 安装方法 安装命令&#xff08;全局安装&#xff0c;不要在虚拟环境中安装&#xff0c;方便后面创建环境使用&#xff09; pip install poetry修改虚拟环境路径&#xff08;首次使用poetry时执行&…...

UVM config机制及uvm_resource_pool

目录 1. uvm_config_db 类源码 1.1 set 1.2 get 2. uvm_resource_pool 2.1 uvm_resource_pool::set 2.2 uvm_resource 3. usage 4. 小结 uvm提供一种uvm_config_db机制使得在仿真中通过变量设置来修改环境,使环境更加灵活。本文主要介绍uvm_config_db#(type)::get/set…...

JAVA学习*接口

接口 在生活中我们常听说USB接口&#xff0c;那接口是什么呢&#xff1f; 在Java中&#xff0c;接口相当于多个类的一种公共规范&#xff0c;是一种引用数据类型。 定义接口 public interface IUSB {public static final String SIZE "small";public abstract vo…...

Day11 动态规划入门

动态规划 就是 : 给定一个问题&#xff0c;我们把它拆成一个个子问题&#xff0c;直到子问题可以直接解决。然后把子问题的答案保存起来&#xff0c;以减少重复计算。再根据子问题答案反推&#xff0c;得出原问题解的一种方法. 记忆化搜索 暴力dfs 记录答案 动态规划入门思…...

WPF UI元素保存为图像文件

WPF UI元素保存为图像文件 实现功能示例代码使用示例关键代码说明WPF UI元素保存为图像文件 实现功能 将WPF界面元素(如控件、布局容器)的当前视觉内容保存为图像文件适用场景:截取控件的实时显示内容(如图表、界面快照);将动态生成的UI元素导出为图片用于分享、存档或打…...

指令型样本或偏好型样本有什么区别和联系

两者都是基于给定文本生成的训练样本&#xff0c;但侧重点和用途不同&#xff1a; 指令型样本&#xff08;Instruction-based samples&#xff09; 结构&#xff1a;通常是一个简单的指令和对应的回答&#xff0c;例如一对“问题&#xff0d;答案”或“指令&#xff0d;回答”。…...

neo4j-如何让外部设备访问wsl中的neo4j

WSL 运行在一个虚拟网络环境中&#xff0c;它的 IP 只能被宿主 Windows 访问&#xff0c;外部设备无法直接访问 WSL 的端口。你需要在 Windows 上转发端口&#xff0c;让外部设备可以访问 Windows 并映射到 WSL。 1. 获取 WSL 的 IP 地址 在 WSL 中运行以下命令获取其 IP 地址…...

Python实验:读写文本文件并添加行号

[实验目的] 熟练掌握内置函数open()的用法&#xff1b;熟练运用内置函数len()、max()、和enumerate()&#xff1b;熟练运用字符串的strip()、ljust()和其它方法&#xff1b;熟练运用列表推导式。 [实验和内容] 1.编写一个程序demo.py&#xff0c;要求运行该程序后&#xff0…...

IDEA导入jar包后提示无法解析jar包中的类,比如无法解析符号 ‘log4j‘

IDEA导入jar包后提示无法解析jar包中的类 问题描述解决方法 问题描述 IDEA导入jar包的Maven坐标后&#xff0c;使用jar中的类比如log4j&#xff0c;仍然提示比如无法解析符号 log4j。 解决方法 在添加了依赖和配置文件后&#xff0c;确保刷新你的IDE项目和任何缓存&#xff…...

抖音用户视频批量下载工具开发全解析

一、逆向工程原理剖析 1.1 抖音Web端防护体系 抖音采用五层防御机制保护数据接口: graph LRA[浏览器指纹检测] --> B[请求参数签名]B --> C[Cookie动态验证]C --> D[请求频率限制]D --> E[IP信誉评级] 1.2 核心参数解密 参数名称作用原理生成方式有效期x-bogu…...

数据结构——顺序栈seq_stack

前言&#xff1a;大家好&#x1f60d;&#xff0c;本文主要介绍了数据结构——顺序栈 目录 一、概念 1.1 顺序栈的基本概念 1.2 顺序栈的存储结构 二、基本操作 2.1 结构体定义 2.2 初始化 2.3 判空 2.4 判满 2.5 扩容 2.6 插入 入栈 2.7 删除 出栈 2.8 获取栈顶元…...