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

文章讨论了基于Shiro的权限管理,包括认证和授权的实现方式,RBAC模型的概念及其优势。提到了如何手动编写Web过滤器验证权限,解释了Shiro中的anon和authc注解。此外,还涉及OAuth2认证流程,尤其是微信登录的OAuth2应用场景,以及为何不采用HTTPSession存储令牌,讨论了JWT作为令牌生成技术的安全考量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

目录

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

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();  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值