shiro权限框架面试题
1. 请介绍一下Shiro框架?
Shiro是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能。它的主要目标是对身份认证(Authentication)和授权(Authorization)进行管理,从而处理用户对应用程序的访问。
2. Shiro的主要功能有哪些?
Shiro主要有以下四个功能:认证(Authentication)、授权(Authorization)、加密(Cryptography)和会话管理(Session Management)。
- 认证:验证用户的身份是否正确。这是保护系统安全的唯二道防线,主要是通过用户名和密码进行验证。
- 授权:确定用户是否有足够的权限访问某个资源。在认证通过后,Shiro将会对用户进行授权,确认用户可以访问哪些资源。
-
加密:提供加密和解密的功能,保证数据的安全性。Shiro内置了对密码等敏感信息的加密处理。
- 会话管理:维护用户的会话信息,包括用户的登录状态、权限信息等。
3. Shiro如何实现认证?
Shiro的认证过程主要包括两个步骤:验证用户提交的用户名和密码是否正确;如果正确,创建对应的Subject并存储到SecurityManager中。
具体来说,当用户尝试登录时,Shiro首先会根据用户提供的用户名去数据库中查对应的用户记录,然后比对用户提供的密码是否正确。如果用户名不存在或者密码错误,那么认证失败;否则,Shiro会创建一个代表当前用户的Subject对象,并将这个Subject对象与该用户的权限信息关联起来,然后将这个Subject对象存储到SecurityManager中。
4. Shiro如何实现授权?
Shiro的授权是通过Realm来实现的。Realm是一个接口,定义了获取用户及其角/权限信息
的方法。Shiro内置了多种Realm实现,例如,JDBCRealm用于从数据库中获取用户及其角/权限信息,LDAPRealm用于从LDAP服务器中获取用户及其角/权限信息。
当需要进行授权判断时,Shiro会调用对应Realm的doGetAuthorizationInfo方法来获取用户的权限信息,然后根据这些信息来判断用户是否有权限访问某个资源。
5. Shiro如何处理并发问题?
Shiro通过SessionManagementSupport类来管理用户的会话信息,以解决并发问题。每个经过认证的用户都会生成一个唯二的session ID,Shiro将这个session ID作为key,用户的Subject对象作为value,存储在HttpServletRequest对象的session中。这样,即使有多个线程同时访问同一个用户,也可以通过session ID来区分不同的用户会话。
6. Shiro如何处理记住我功能?
Shiro的记住我功能是通过Cookie来实现的。当用户启用了记住我功能后,Shiro会在用户登录成功后,生成一个特殊的cookie,将这个cookie返回给用户的浏览器。当用户再次访问应用时,浏览器会自动将这个cookie发送给应用服务器,应用服务器再根据这个cookie来获取
用户的Subject对象,从而实现自动登录。
7. Shiro如何处理CSRF攻击?
Shiro通过CsrfTokenFilter类来防止CSRF攻击。CsrfTokenFilter类会对所有的表单提交请求进行检查,如果没有检测到有效的CSRF token,那么请求将被拒绝。restful接口调用实例
8. Shiro支持集吗?
是的,Shiro支持集。在集环境下,每个节点都需要有自己的SecurityManager实例。当用户在一个节点上登录后,其他节点也能识别出这个用户,因为每个节点上的SecurityManager都共享了同一个DAO(Data Access Object)实例,这个DAO实例负责存储用户的认证信息和权限信息。
9. Shiro支持分布式会话管理吗?
是的,Shiro支持分布式会话管理。Shiro可以将用户的会话信息存储在EhCache、Redis等分布式缓存中,从而实现分布式会话管理。这样,即使应用部署在多个节点上,用户的会话信息也能被统一管理。
10. Shiro有没有提供RESTful API?
是的,Shiro提供了一套RESTful API,可以方便地对用户进行认证和授权操作。通过这套API,开发者可以在不依赖Web容器的情况下,使用HTTP协议来进行认证和授权操作。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论