本文的面试题和答案均为本人自己收集,如有错误或者不足,欢迎大家指出
目录
如果一个web方法允许A权限或者B权限都可以访问,注解应该怎么写
@RequiresAuthentication注解是什么意思
如果网站支持微信登录,你能说一下微信登录oauth2流程么?
你们在客户端存放令牌,如果每次提交请求的时候,被抓包了,别人获取Token,就能伪造客户端发起请求,这个该怎么解决?
你做过的系统,权限是怎么管理的
shiro是非常知名的认证和授权框架,并且任意javaWeb项目都可以使用Shiro框架。所以在项目中采用Shiro框架和JWT技术来进行权限管理。
Shiro是靠什么做认证和授权的
可以利用HttpSession或者Redis存储用户的登录凭证以及用户的角色或者身份信息。然后利用过滤器Fillter对每个Http请求进行过滤。
什么是RBAC模型
RBAC模型是指,对于一个系统的权限并不是直接赋予用户的,而是在用户集合和权限集合之间创建一个角色集合,每一个角色都有相应的权限,在创建用户的时候会分配给用户一个或者多个角色,该用户就拥有此角色的所有操作权限。
这样做的好处是,不必在每次创建用户时都进行分配权限的操作,只要分配用户相应的角色即可,而且角色的权限变更比用户的权限变更要少得多,这样将简化用户的权限管理,减少系统的开销。
如果让你手写一个Web过滤器验证权限,你会怎么写
- 创建一个权限管理类:创建一个权限管理类,该类可以存储所有权限的相关信息,例如权限名称、权限代码等。
- 编写 Web 过滤器类:编写一个 Web 过滤器类,该类可以实现 Filter 接口,并在 doFilter() 方法中进行权限验证。
- 配置 Web 过滤器:在 Web 应用程序的配置文件中,配置该 Web 过滤器。例如,可以使用 Web 配置类来设置过滤器的位置、名称等。
- 实现自定义权限检查方法:在权限管理类中,可以实现自定义的权限检查方法,例如 isUserInRole() 方法。该方法可以根据用户的角色信息,来检查用户是否拥有指定的角色。
- 调用自定义权限检查方法:在 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();