启明星辰春招面试题

《网安面试指南》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.mzph.cn/bicheng/74081.shtml

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

相关文章

Live555+Windows+MSys2 编译Androidso库和运行使用

下载 wget http://www.live555.com/liveMedia/public/live555-latest.tar.gz tar -xzvf live555-latest.tar.gz加入版本控制 git init git add . git commit -a -m "first init" git log修改config.android-arm64 cd live vim config.android-arm64 ./genMakefile…

实用工具-Stirling-PDF

windows桌面版参考这个文档 Getting Started | Stirling-PDF 安装包推荐使用迅雷下载&#xff0c;先转存到迅雷网盘在使用迅雷下载速度嘎嘎快。 github:https://github.com/Stirling-Tools/Stirling-PDF Stirling-PDF 是一个强大的、基于 Web 的开源 PDF 处理工具&#xff0c…

借助AI Agent实现数据分析

在当今数据驱动的世界中&#xff0c;数据分析已成为企业决策、科学研究和社会治理的核心工具。然而&#xff0c;随着数据量的爆炸式增长和复杂性的提升&#xff0c;传统的数据分析方法面临着效率低下、成本高昂和人力不足等挑战。AI技术的快速发展&#xff0c;尤其是AI Agent的…

JavaScript实现一个函数,将数组扁平化(flatten),即把多维数组转为一维数组。

大白话实现一个函数&#xff0c;将数组扁平化&#xff08;flatten&#xff09;&#xff0c;即把多维数组转为一维数组。 思路 实现数组扁平化的基本思路是遍历数组中的每个元素&#xff0c;如果元素是数组&#xff0c;就递归地将其扁平化并添加到结果数组中&#xff1b;如果元…

麒麟操作系统安装人大金仓数据库

如果你想拥有你从未拥有过的东西&#xff0c;那么你必须去做你从未做过的事情 在当前数字化转型和信息安全备受重视的背景下&#xff0c;众多公司积极推进国产化改造进程。在操作系统领域&#xff0c;统信、open 欧拉、中标麒麟、银河麒麟等国产操作系统崭露头角&#xff0c;逐…

开发SAPUI5 Fiori应用并部署到SAP系统

首先新建一个项目文件夹 在VScode中打开 打开SAP Fiori&#xff08;需要先下载安装&#xff0c;参考上上一篇文章&#xff09; ,选择已添加的SAP S4 ERP系统 ,点击创建Firoi应用。 如果没有添加系统的&#xff0c;点击添加按钮&#xff0c;添加即可&#xff0c;注意&#xff…

右键添加:新建HTML模板文件

使用注册表给Windows右键添加:新建HTML文档模板的功能_注册表右键新建-CSDN博客 新建文件有了&#xff0c;但是没有引用模板文件&#xff0c;是空文件。 默认改成 htmlfile 模板成功

[极客大挑战 2019]Knife——3.20BUUCTF练习day4(1)

[极客大挑战 2019]Knife——3.20BUUCTF练习day4(1) 很简单 蚁剑连接 根目录下有flag flag{f77e8444-dd87-48b3-8fe0-a735b5a5c708}

力扣22.括号生成

22. 括号生成 - 力扣&#xff08;LeetCode&#xff09; 代码区&#xff1a; class Solution {vector<string> ans; public:vector<string> generateParenthesis(int n) {dfs(0,0,n,"");return ans;}void dfs(int left,int right,int n,string str){if(l…

第37周:文献阅读

目录 摘要 Abstract 文献阅读 问题引入 研究背景 研究意义 研究目的 实验方法 TimeGAN 数据增强 预测模型的独立性 创新点 实验研究 数据准备 合成数据分析 模型比较 总结 摘要 该文献围绕利用 TimeGAN 提高供热变电站热负荷预测精度展开。结构上&#x…

NFS 安装与测试

NFS 安装与测试 服务器 # NFS 共享目录 mkdir -p ${HOME}/Share/nfs && sudo chown -R nobody:nogroup ${HOME}/Share/nfs# 安装 NFS Server sudo apt install nfs-kernel-server# 配置 NFS 目录 sudo cp -arf /etc/exports /etc/exports.bak sudo tee -a /etc/exports…

算法题(103):数独

审题&#xff1a; 本题需要我们找出数独的解&#xff0c;并打印出来 时间复杂度分析&#xff1a; 本题是9*9的数独格子&#xff0c;所以数据量小于25&#xff0c;可以使用2^n的算法 思路&#xff1a; 方法一&#xff1a;深度优先搜索 首先确定搜索及插入策略&#xff1a; 我们采…

snmp/mib采用子代理模式,编码,部署

0.环境 0.1 编译net-snmp cd net-snmp-5.7.2 ./configure --prefix/usr/local/snmp BEGIN failed--compilation aborted at Makefile.PL line 1. make: *** [perlmakefiles] Error 2 yum install cpan -y make && make install /…

# [RPA] 使用八爪鱼进行高效网页数据采集

在许多行业中&#xff0c;数据是核心资产。然而&#xff0c;虽然许多网站的文本内容可以免费访问&#xff0c;但手动一条一条采集&#xff0c;不仅耗时耗力&#xff0c;还容易出错。这种情况下&#xff0c;使用自动化工具来提高采集效率就显得尤为重要。本文将介绍 八爪鱼 这一…

IDI_APPLICATION 与 IDC_ARROW资源存放在工程的哪个路径?

书籍&#xff1a;《windows程序设计(第五版)》的开始 环境&#xff1a;visual studio 2022 内容&#xff1a;HELLOWIN程序 说明&#xff1a;以下内容大部分来自腾讯元宝。 IDI_APPLICATION 和 IDC_ARROW 是 ​Windows 系统预定义的资源标识符&#xff0c;它们并不以文件形式…

算法 | 优化算法比较

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 优化算法 ‌一、主流优化算法分类‌1‌、传统梯度类算法‌2‌、启发式算…

腾讯云HAI1元体验:轻松调用DeepSeek-R1模型搭建网站

前言 随着云计算和人工智能技术的不断发展&#xff0c;构建和部署智能化的网页变得越来越简单。腾讯云提供的HAI&#xff08;人工智能平台&#xff09;和DeepSeek&#xff08;智能搜索引擎&#xff09;服务&#xff0c;能帮助开发者快速搭建智能化网页&#xff0c;提升用户体验…

AI Agent系列(七) -思维链(Chain of Thought,CoT)

AI Agent系列【七】 前言一、CoT技术详解1.1 CoT组成1.2 CoT的特点 二、CoT的作用三、CoT的好处四、CoT适用场景五、CoT的推理结构 前言 思维链(Chain of Thought,CoT)&#xff0c;思维链就是一系列中间的推理步骤(a series of intermediate reasoning steps)&#xff0c;通过…

【一起来学kubernetes】21、Secret使用详解

Secret 的详细介绍 Secret 是 Kubernetes 中用于存储和管理敏感信息&#xff08;如密码、令牌、密钥等&#xff09;的资源对象。Secret的设计目的是为了安全地存储和传输敏感信息&#xff0c;如密码、API密钥、证书等。这些信息通常不应该直接硬编码在配置文件或镜像中&#x…

opencv中stitch图像融合

openv版本: opencv249 vs &#xff1a;2010 qt : 4.85 #include "quanjing.h"#include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <open…