启明星辰春招面试题

news2025/3/23 16:58:46

《网安面试指南》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. 应用场景
    • 记录异常登录尝试。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2319606.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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

摘要 边缘计算通过将算力下沉至网络边缘&#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服务器就是接…

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

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打开…

大数据学习(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…

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…

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…

数据结构——顺序栈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 获取栈顶元…

python3.13.2安装详细步骤(附安装包)

文章目录 前言一、python3.13.2下载二、python3.13.2安装详细步骤1.查看安装文件2.启动安装程序3.安装模式选择4.自定义安装配置5.高级选项设置6.执行安装7.开始安装8.安装完成8.打开软件9.安装验证 前言 在数字化时代&#xff0c;Python 已成为不可或缺的编程语言。无论是开发…

AI-Talk开发板之更换串口引脚

一、默认引脚 CSK6011A使用UART0作为Debug uart&#xff0c;AI-Talk开发板默认使用的GPIOA2和GPIOA3作为Debug uart的RX和TX&#xff0c;通过连接器CN6引出。 二 、更换到其它引脚 查看60xx_iomux_v1.0可以&#xff0c;UART0的tx和rx可以映射到很多管脚上。 结合AI-Talk开发板…

深度解读DeepSeek:源码解读 DeepSeek-V3

深度解读DeepSeek&#xff1a;开源周&#xff08;Open Source Week&#xff09;技术解读 深度解读DeepSeek&#xff1a;源码解读 DeepSeek-V3 深度解读DeepSeek&#xff1a;技术原理 深度解读DeepSeek&#xff1a;发展历程 文章目录 整体流程模型初始化模型前向传播MoE https:/…