【备战秋招】权限常见面试题

news2025/1/21 12:17:48

本文的面试题和答案均为本人自己收集,如有错误或者不足,欢迎大家指出

目录

你做过的系统,权限是怎么管理的

Shiro是靠什么做认证和授权的

什么是RBAC模型

如果让你手写一个Web过滤器验证权限,你会怎么写

Shiro的anon和authc都代表什么意思

你认为编写Web方法,用权限限定好,还是用角色限定好

如果一个web方法允许A权限或者B权限都可以访问,注解应该怎么写

@RequiresAuthentication注解是什么意思

在你的系统中,Shiro认证信息是怎么存放的

说一下什么是oauth2认证

如果网站支持微信登录,你能说一下微信登录oauth2流程么?

为什么不采用HTTpSession存储令牌

你们用什么技术生成的令牌

你们在客户端存放令牌,如果每次提交请求的时候,被抓包了,别人获取Token,就能伪造客户端发起请求,这个该怎么解决?


你做过的系统,权限是怎么管理的

shiro是非常知名的认证和授权框架,并且任意javaWeb项目都可以使用Shiro框架。所以在项目中采用Shiro框架和JWT技术来进行权限管理。

Shiro是靠什么做认证和授权的

可以利用HttpSession或者Redis存储用户的登录凭证以及用户的角色或者身份信息。然后利用过滤器Fillter对每个Http请求进行过滤。

什么是RBAC模型

RBAC模型是指,对于一个系统的权限并不是直接赋予用户的,而是在用户集合和权限集合之间创建一个角色集合,每一个角色都有相应的权限,在创建用户的时候会分配给用户一个或者多个角色,该用户就拥有此角色的所有操作权限。

这样做的好处是,不必在每次创建用户时都进行分配权限的操作,只要分配用户相应的角色即可,而且角色的权限变更比用户的权限变更要少得多,这样将简化用户的权限管理,减少系统的开销。

如果让你手写一个Web过滤器验证权限,你会怎么写

  1. 创建一个权限管理类:创建一个权限管理类,该类可以存储所有权限的相关信息,例如权限名称、权限代码等。
  2. 编写 Web 过滤器类:编写一个 Web 过滤器类,该类可以实现 Filter 接口,并在 doFilter() 方法中进行权限验证。
  3. 配置 Web 过滤器:在 Web 应用程序的配置文件中,配置该 Web 过滤器。例如,可以使用 Web 配置类来设置过滤器的位置、名称等。
  4. 实现自定义权限检查方法:在权限管理类中,可以实现自定义的权限检查方法,例如 isUserInRole() 方法。该方法可以根据用户的角色信息,来检查用户是否拥有指定的角色。
  5. 调用自定义权限检查方法:在 Web 过滤器的 doFilter() 方法中,可以调用自定义权限检查方法,并根据返回值来决定是否允许请求通过。

在这个示例代码中,我们创建了一个 PermissionFilter 类,它实现了 OncePerRequestFilter 接口,并在 doFilter() 方法中进行权限验证。在验证权限时,我们使用了 Web 过滤器配置类来设置过滤器位置,并调用了自定义的权限检查方法 isUserInRole()。最后,我们使用 RedirectView 来重定向到权限页面。

import org.springframework.web.filter.OncePerRequestFilter;  
import org.springframework.web.servlet.ModelAndView;  
import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping;  
import org.springframework.web.servlet.view.RedirectView;

import javax.servlet.ServletException;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;

public class PermissionFilter extends OncePerRequestFilter {

    private static final String PERMISSION_VIEW = "permission";

    @Override  
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,  
                                    FilterChain filterChain) throws ServletException, IOException {  
        // 设置过滤器位置  
        request.setAttribute("permissionFilter", "true");

        // 配置 Web 过滤器  
        String view = PERMISSION_VIEW;  
        SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();  
        mapping.addMapping("/permission/*");  
        ViewResolver viewResolver = new UrlBasedViewResolver();  
        viewResolver.setViewClass(RedirectView.class);  
        viewResolver.setPrefix("/WEB-INF/views/");  
        viewResolver.setSuffix(".jsp");  
        request.getRequestDispatcher(viewResolver.getView(view, request)).forward(request, response);  
    }

    @Override  
    public void afterFilter(HttpServletRequest request, HttpServletResponse response,  
                            FilterFilterChain filterChain) throws ServletException, IOException {  
        // 取消过滤器位置缓存  
        request.removeAttribute("permissionFilter");  
    }  
}

Shiro的anon和authc都代表什么意思

anon:无需认证即可访问。

authc:需要认证才可访问

你认为编写Web方法,用权限限定好,还是用角色限定好

用权限限定好,因为权限是可以动态添加的,不能为了添加一个新的角色就修改Java代码。

与角色相比,权限一般是固定的。

在实际应用中,两种方式可以结合使用,以达到更好的安全性和灵活性。例如,一个 Web 方法可以根据不同的用户角色来限制其访问,如果用户没有相应的角色,则该方法将无法访问。同时,也可以使用权限限定来保护敏感数据和操作,例如对数据库的增删改操作需要进行权限验证,只有经过授权的用户才能进行这些操作。

如果一个web方法允许A权限或者B权限都可以访问,注解应该怎么写

@Secured({"A", "B"})

@RequiresAuthentication注解是什么意思

使用 @RequiresAuthentication 注解标记的方法将在访问时强制要求用户进行身份验证。如果用户没有进行身份验证,则访问将被拒绝,并抛出 SecurityException 异常。

在你的系统中,Shiro认证信息是怎么存放的

可以通过实现 Realm 接口来存储认证信息,Realm 是 Shiro 的核心组件之一,它负责从数据源中获取安全数据(如用户、角色、权限等),并对这些数据进行验证和授权。

实现 Realm 接口需要实现其两个方法:

  1. doGetAuthenticationInfo(AuthenticationToken token -> token是AuthenticationToken类型的):用于对用户进行身份认证,验证用户的身份信息和凭证信息是否正确,并返回一个 AuthenticationInfo 对象表示认证信息。
  2. doGetAuthorizationInfo(PrincipalCollection principals):用于对用户进行授权,根据用户的身份信息和角色信息获取用户的权限信息,并返回一个 AuthorizationInfo 对象表示授权信息。

其中,AuthenticationInfo 对象表示认证信息,包含了身份信息和凭证信息,可以通过 SimpleAuthenticationInfo 或者其他实现类来创建

说一下什么是oauth2认证

允许用户在不分享他们的用户名和密码的情况下,授权第三方应用访问特定的用户数据。这种授权是通过使用访问令牌(access tokens)来实现的,这些令牌是从授权服务器获得的

  1. 授权码(Authorization Code):这是最常用的授权类型,主要用于服务器到服务器的通信。在这种流程中,用户首先被重定向到授权服务器,以授权第三方应用访问其数据。授权服务器会向用户显示一个授权页面,如果用户同意,授权服务器将返回一个授权码。之后,第三方应用使用这个授权码向授权服务器请求访问令牌,最终用于访问用户数据的API。
  2. 隐式(Implicit):这种类型主要用于纯前端应用,如单页应用。在这种流程中,用户授权后,授权服务器直接返回访问令牌,不需要额外的授权码。这种方法适用于不涉及服务器端逻辑的应用,但安全性相对较低。
  3. 密码式(Resource Owner Password Credentials):在这种流程中,用户直接将他们的用户名和密码提供给第三方应用,然后应用使用这些凭据向授权服务器请求访问令牌。这种方法的安全性较低,因为用户必须将他们的凭据提供给第三方应用。它通常在用户对第三方应用有很高信任度时使用。
  4. 客户端凭据(Client Credentials):这种类型用于服务间通信,没有用户交互。在这种流程中,第三方应用使用自己的凭据(client ID 和 client secret)向授权服务器请求访问令牌。这种令牌通常用于访问不依赖特定用户的受保护资源。

如果网站支持微信登录,你能说一下微信登录oauth2流程么?

  1. 用户点击登录按钮,应用程序向微信API服务器发送OAuth2授权请求。
  2. 微信API服务器返回一个授权页面URL,应用程序将用户重定向到该URL,以便用户可以在该页面上授权应用程序访问他们的微信账户信息。
  3. 用户在微信授权页面上登录并授权应用程序访问他们的微信账户信息。
  4. 微信API服务器将用户重定向回应用程序,并提供一个授权码。
  5. 应用程序使用授权码向微信API服务器发送请求,以获取访问令牌和刷新令牌。
  6. 微信API服务器返回访问令牌和刷新令牌。
  7. 应用程序使用访问令牌向微信API服务器发送请求,以获取用户的微信账户信息。
  8. 微信API服务器返回用户的微信账户信息。
  9. 应用程序使用刷新令牌向微信API服务器发送请求,以获取新的访问令牌。
  10. 微信API服务器返回新的访问令牌。
  11. 应用程序使用新的访问令牌向微信API服务器发送请求,以继续访问用户的微信账户信息。

注意:在OAuth2流程中,访问令牌是有时效性的,过期后需要使用刷新令牌获取新的访问令牌。在微信OAuth2流程中,访问令牌的有效期为2个小时,刷新令牌有效期为30天。

为什么不采用HTTpSession存储令牌

  1. 分布式部署问题:如果应用程序是分布式部署的,为了保证HTTPSession的一致性,需要使用分布式会话管理方案,如Tomcat的Tomcat Clustering等。这种方案需要额外的配置和维护,增加了系统的复杂性。
  2. 扩展性问题:如果应用程序需要扩展到多个服务器,使用HTTPSession存储令牌就需要考虑如何保证多个服务器之间的会话一致性。如果使用分布式会话管理方案,这需要额外的配置,而且可能会影响系统的性能。
  3. 性能问题:使用HTTPSession存储令牌会对服务器的内存和CPU资源造成一定的负担。如果令牌的数量较多,会占用大量的服务器资源,影响系统的性能。
  4. 安全性问题:如果HTTPSession没有正确配置,可能会存在会话劫持等安全问题。此外,如果攻击者能够获取服务器上的HTTPSession数据,就可以获取到令牌,进而伪造用户请求。

你们用什么技术生成的令牌

JWT技术

JWT是用于身份验证和授权的字符串。如果使用JWT技术,即使后端使用负载均衡,后端收到token,也可以进行验证。并且JWT技术兼容更多的客户端 如APP,小程序等

你们在客户端存放令牌,如果每次提交请求的时候,被抓包了,别人获取Token,就能伪造客户端发起请求,这个该怎么解决?

使用Http协议,如果被抓包了,别人也无法破解其中的内容

 

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

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

相关文章

锅炉燃烧自动控制系统

串级控制 以外环温度、内环煤气流量为例 重点1 主PID输出0~100需要经过线性转换模块进行转换,转换成与煤气流量相同量纲才能作为副PID的设定值。假设煤气流量量程100000;则副PID设定值如下: secSET mainLMN/100*100000; 重点2…

创造者基金 2023 年 4 月亮点

隆重推出创作者基金的 2023 年 4 月亮点 NFT 系列——一系列令人着迷且令人惊叹的数字资产,让大家为之震撼!该系列的角色令人惊叹,包括阿兹特克酋长、维京战士、残酷的国王、传奇的九尾狐等等,是收藏家和爱好者的必备之物。 无论你…

优化 | 随机原始对偶混合梯度(SPDHG)算法及在图像处理中的应用

论文解读者:陈宇文,胡明杰,史铭伟,赵田田 许多实际问题都可以建模为凸优化问题。相比于直接求解原问题,将问题转化为鞍点问题往往会带来好处。求解鞍点问题的一种常用算法是原对偶混合梯度算法 (PDHG),它在…

ubuntu-server22.04编译Redis7.0.11源码支持TLS

1.克隆redis源码: git clone https://github.com/redis/redis.git 编译前确认已安装GCC11与G++11和cmake及make及pkg-config 安装命令如下: apt install gcc -y apt install g++ -y apt install cmake -y apt install pkg-config 因为要支持TLS所以要安装OPENSSL开发库 ap…

阿里云CPFS与OSS之间数据双向流动机制

随着云上对象存储成本的逐渐降低,越来越多的企业利用阿里云OSS存储他们的大量数据并构建数据湖。现在阿里云文件存储CPFS与对象存储OSS实现了深度集成,客户可以在三十分钟内创建一个高性能CPFS文件系统并链接到他们的OSS bucket。当链接到OSS bucket以后…

实验二 ROS结合OpenCV示例——人脸识别

ROS结合OpenCV示例——人脸识别 一、实验原理&#xff1a;二、实验步骤&#xff1a;<1> 安装opencv 以及串口功能包<2> 测试opencv串口是否安装成功 三、程序分析&#xff1a; 一、实验原理&#xff1a; Opencv库是一个基于BSD许可发行的跨平台开源计算机视觉库&a…

STM32WB55_NUCLEO开发(9)----接收手机数据点亮LED

概述 本篇文章主要介绍如何使用STM32CubeMX对生成STM32WB工程&#xff0c;并通过与STM32WB配对&#xff0c;向该特征写入一个任意字节&#xff0c;绿色LED会切换。 硬件准备 首先需要准备一个开发板&#xff0c;这里我准备的是NUCLEO-WB55RG 的开发板&#xff1a; 选择芯片…

加拿大各省接受公立教育的初始年龄汇总 — 供携子女赴加的访学、博后参考

近年来到加拿大从事访问学者和博士后研究的申请者日益增多&#xff0c;有些申请者想带孩子同去上公立学校。因为加拿大各省教育局政策有差异&#xff0c;所以入学&#xff08;包括学前班&#xff09;年龄不同&#xff0c;为此知识人网小编整理本文为大家解惑答疑。 加拿大为本国…

GitHub Actions自动发布Package到Pub.dev

一、创建package或plugin 先创建一个package或者plugin 二、手动上传第一个版本到pub.dev flutter packages pub publish --serverhttps://pub.dartlang.org 三、在admin配置自动化发布 打开pub.dev中的对应的package按照以下图片配置 四、在项目跟目录配置发布脚本 1、在…

XMLMapperBuilder解析*mapper.xml

springboot的MybatisAutoConfiguration自动配置类会创建SqlSessionFactory&#xff0c;创建过程就是填充configuration属性&#xff0c;调用buildSqlSessionFactory()方法完成SqlSessionFactory创建&#xff0c;这其中就会创建XMLMapperBuilder解析mapper.xml和XMLConfigBuilde…

UHD在DPDK下进行编译

1.安装choco windows环境,用管理员权限打开 powershell 命令行界面。 输入命令:Set-ExecutionPolicy AllSigned 继续输入命令:Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]…

C++---区间DP/高精度计算---凸多边形的划分(每日一道算法2023.4.27)

注意事项&#xff1a; 本题是"区间DP—能量项链"的扩展题&#xff0c;可以先理解下那道题。 本题使用了"高精度乘法"和"高精度加法"&#xff0c;可以去这两篇文章看&#xff0c;有详解。 题目&#xff1a; 给定一个具有 N 个顶点的凸多边形&…

什么是SSO?

SSO&#xff08;Single Sign On&#xff09;单点登录。SSO是在多个应用系统中&#xff0c;用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。它是目前比较流行的企业业务整合的解决方案之一。 当…

中山大学_程序设计新手赛2023_4题的小朋友_总结

送自己一句话&#xff1a;即使生活很不顺利&#xff0c;也不要成为一个连自己都讨厌的人 那样&#xff0c;当你有一天回首过往&#xff0c;只不过是在演戏中匆匆做过这一生 题目&#xff1a;见我上传的资源 A:关于时间复杂度 解&#xff1a; 1.关键&#xff1a; 法一&…

前端开发之axios请求封装详细讲解

前端开发之axios请求封装 前言1、安装axios2、创建公共文件request3、导入axiso4、初始化axios5、axios请求拦截器6、axios响应拦截器7、handleData&#xff1a;处理请求后来的response8、CODE_MESSAGE&#xff1a;code信息 前言 在vue项目中&#xff0c;和后台交互获取数据这…

openEuler社区人才评定考试流程指引

最近因为公司工作的需要参加考试了openEuler社区人才评定考试&#xff0c;本次考试题型主要包括单选、多选、判断三类题型。考试内容基本都是操作系统使用相关的内容。 考试需要注意事项&#xff1a; 1.考试为线上答题考试&#xff0c;需开启摄像头。 2.考试期间请保持周围环…

SQL server增删改查(1)

SQL server数据类型 整数型: BIGINT INT SMALLINT 小数型: FLOAT DOUBLE 文本型: CHAR VARCHAR NCHAR NVARCHAR TEXT 日期和时间类型 DATE TIME DATETIME 布尔型: BIT 数据类型含义INT长整数(也可以写作INTEGER)SMALLINT短整数CHAR(n)长度为n的定长字符串, 不足n个字符的空白部…

Scala语言入门以及基本语法

文章目录 前言1.环境搭建1) IDEA中插件下载2) SDK下载配置 2.基本使用1&#xff09;var与val的区别2) .基本数据类型3).字符串的基本用法4) 控制结构1) if else2) for 循环3) while循环 5)类6) 函数 前言 scala在一种简洁的高级语言中结合了面向对象和函数式编程。Scala的静态…

8个免费的PNG素材网站推荐

很多设计小白都不知道什么是PNG。事实上&#xff0c;PNG是一种支持透明度的图像格式。当你想在设计中将图像与背景或文本混合时&#xff0c;它就会派上用场。 如果你没有时间为你正在处理的设计创建透明的PNG图像&#xff0c;你也可以使用我收集的PNG素材网站&#xff0c;以便…

【Linux从入门到精通】Linux常用基础指令(中)

本篇文章接上篇文章&#xff08;【Linux从入门到精通】Linux常用基础指令&#xff08;上&#xff09;&#xff09;进行详解。本章的指令相对较为重要&#xff0c;使用频率较高&#xff0c;难度相对上篇文章较难&#xff0c;也较为复杂。希望能对你的理解有所帮助。 文章目录 一…