Shiro 是一个强大且灵活的 Java 安全框架,它提供了认证和授权功能,以下是关于 Shiro 认证的详细解释:
1、认证过程
初始化环境:首先需要构建安全管理器环境,通常是通过DefaultWebSecurityManager
来实现。
构建数据源:使用自定义的数据源,例如CustomRealmCh07
,来模拟从数据库获取数据,这个数据源包含了用户的用户名和密码信息。
加密处理:构建HashedCredentialsMatcher
,设置加密方式(如 MD5)和加密次数,这一步是为了对用户输入的密码进行加密处理。
获取主体与认证:获取主体(即当前用户),然后根据用户名和密码生成 token(令牌),接着进行登录(提交认证),系统会根据自定义数据源中的 doGetAuthenticationInfo() 方法来进行认证。
2、加盐加密认证
流程逻辑:与不加盐的流程类似,但增加了加盐的步骤以提高密码的安全性。
修改部分:在自定义数据源中添加方法以获得加盐后的密文密码。
编写测试类:编写测试类来验证加盐加密认证的正确性。
3、整合 JWT 实现认证和权限鉴定
编写 JWT 工具类:用于生成和验证 token。
编写 JWTToken:取代原生 token,实现AuthenticationToken
接口并重写getPrincipal()
和getCredentials()
两个方法。
编写 JWTFilter:过滤请求,封装subject.login()
方法。
编写 JWTRealm:用于进行权限信息的验证,让 Shiro 支持 JWTToken。
编写 Shiro 配置类:添加过滤器和过滤规则,为默认的安全管理器绑定编写的 realm 并关闭 session。
编写异常处理类:捕获抛出的异常,并根据不同的异常返回给前端相应的信息。
编写 Controller:处理未认证请求的控制器。
4、Shiro 认证原理分析
初始化环境:通过Environment
对象加载配置文件和初始化SecurityManager
。
获取 SecurityManager:安全管理器是 Shiro 的核心,负责认证、授权等功能。
获取当前主体:主体可以是用户或程序,可以访问SecurityManager
以获得认证、授权等服务。
封装账号密码:将账号和密码封装到UsernamePasswordToken
中。
执行认证:通过Subject
的login
方法进行认证,认证过程中涉及到SecurityManager
、Subject
、Authenticator
、Realm
等组件。
Shiro 认证是一个涉及多个组件和步骤的过程,可以根据具体需求选择是否加盐加密或整合 JWT 来实现更复杂的认证和权限控制功能。