Shiro相关问题学习记录

Apache Shiro是一个轻量级的Java安全框架,专注于身份验证、授权、密码管理和会话管理。它不依赖Spring,适用于Web、C/S及分布式系统的权限管理。Shiro通过Realm与数据库交互进行用户认证,使用HashedCredentialsMatcher增强密码安全性。核心组件包括Subject、SecurityManager和Realm。配置主要包括ShiroConfig和Realm实现,通过Filter控制URL访问权限。
摘要由CSDN通过智能技术生成

Apache Shiro是一个Java安全框架,执行身份验证、授权、密码和会话管理。

What

Shiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证、用户授权

spring中有spring security (原名Acegi),是一个权限框架,它和spring依赖过于紧密,没有shiro使用简单。
shiro不依赖于spring,shiro不仅可以实现 web应用的权限管理,还可以实现c/s系统,分布式系统权限管理,shiro属于轻量框架,越来越多企业项目开始使用shiro。

Why

  • 用户认证就是登陆操作、用户授权就是对资源的操作。
  • 以前URL拦截的时候,需要把所有的URL都在数据库进行配置管理。非常麻烦,不易维护。
  • Shiro通过realm去数据库查询数据来认证,而非查询配置文件的数据的。自定义reaml要继承AuthorizingRealm类就行了。
  • 散列算法就是为了让密码不被别人给破解。我们可对原始的密码加盐再进行散列,这就加大了破解的难度了。

How

  • 构造SecurityManager环境
  • Subject.login()提交认证
  • SecurityManager.login()执行认证
  • Authenticator执行认证
  • Realm根据身份获取验证信息

认证实现流程:

1. 获取当前的 Subject. 调用 SecurityUtils.getSubject();
2. 测试当前的用户是否已经被认证. 即是否已经登录. 调用 Subject 的 isAuthenticated() 
3. 若没有被认证, 则把用户名和密码封装为 UsernamePasswordToken 对象
1). 创建一个表单页面
2). 把请求提交到 SpringMVC 的 Handler
3). 获取用户名和密码. 
4. 执行登录: 调用 Subject 的 login(AuthenticationToken) 方法. 
5. 自定义 Realm 的方法, 从数据库中获取对应的记录, 返回给 Shiro.
1). 实际上需要继承 org.apache.shiro.realm.AuthenticatingRealm 类
2). 实现 doGetAuthenticationInfo(AuthenticationToken) 方法. 
6. 由 shiro 完成对密码的比对. 
通过 AuthenticatingRealm 的 credentialsMatcher 属性来进行的密码的比对!

 

密码的比对:

通过 AuthenticatingRealm 的 credentialsMatcher 属性来进行的密码的比对!

替换当前 Realm 的 credentialsMatcher 属性. 直接使用 HashedCredentialsMatcher 对象, 并设置加密算法即可. 

配置application-shiro.xml
    <bean id="jdbcRealm" class="com.zhongyou.shiro.realms.ShiroRealm">
        <property name="credentialsMatcher">
            <bean class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
                <property name="hashAlgorithmName" value="MD5"></property>
                <property name="hashIterations" value="1024"></property>
            </bean>
        </property>
    </bean>

三个核心组件:Subject, SecurityManager 和 Realms.

  1. Subject:即“当前操作用户”。主体,代表了当前“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是Su
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Thompson

相互学习,欢迎指正。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值