Spring整合Shiro(三)-笔记篇

笔记

Shiro登陆认证流程
1.通过SeucrityUtils获取当前用户(Subject),调用SecurityUtils.getSubject()方法
2.判断用户是否登陆currentUser.isAuthenticated()
3.如果用户没有登陆,获取登录页面传过来的值(SpringMVC@Handler)
4.创建令牌UsernamePasswordToken token = new UsernamePasswordToken(#userName, #password)
5.通过Realm(继承org.apache.shiro.realm.AuthenticatingRealm)与数据库中的用户密码比对
密码的比对:通过 AuthenticatingRealm 的 credentialsMatcher 属性来进行的密码的比对!

密码加密
# 如何把一个字符串加密为 MD5? 
   替换当前 Realm 的 credentialsMatcher 属性. 直接使用 HashedCredentialsMatcher 对象, 并设置加密算法即可. 

# 使用 MD5 盐值加密: 
 如何做到:
1). 在 doGetAuthenticationInfo 方法返回值创建 SimpleAuthenticationInfo 对象的时候, 需要使用
    SimpleAuthenticationInfo(principal, credentials, credentialsSalt, realmName) 构造器
2). 使用 ByteSource.Util.bytes() 来计算盐值. 
3). 盐值需要唯一: 一般使用随机字符串或 user id
4). 使用 new SimpleHash(hashAlgorithmName, credentials, salt, hashIterations); 来计算盐值加密后的密码的值.

#如何授权
1. 授权需要继承 AuthorizingRealm 类, 并实现其 doGetAuthorizationInfo 方法
2. AuthorizingRealm 类继承自 AuthenticatingRealm, 但没有实现 AuthenticatingRealm 中的 
   doGetAuthenticationInfo, 所以认证和授权只需要继承 AuthorizingRealm 就可以了. 同时实现他的两个抽象方法.



总结:1.Shiro加密原先实现方法都是写加密工具类,可以通过配置MD5盐值加密,这样加密都不用自己实现,当然你向数据库中存数据时当然要手写加密算法,一会把之前做多Realm测试的加密算法贴出来
2.URL权限资源可以放到配置文件或数据库中,这些就降低了Spring配置文件的压力,一堆堆的URL配置很占空间.
3.授权时要注意在配置MD5盐值加密时注意接口
4.我在学习时候已经把上面的笔记写在配置文件中了

    public static void main(String[] args) {
        String algorithmName="MD5" ;
        Object source="admin1234" ;
        String salt="admin";
        int hashIterations=1024   ;
        Object result=  new SimpleHash(algorithmName, source, salt, hashIterations) ; 
        System.out.println(result);  //02bad5ac06ea6ce0be3a24fd39781d11
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章