真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Shrio入門-創(chuàng)新互聯(lián)

文章目錄
    • 登錄認(rèn)證
    • 角色、授權(quán)
    • shiro加密
    • Shrio自定義登錄認(rèn)證

1、引入依賴

涼城網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)公司2013年至今到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。
org.apache.shiroshiro-core1.9.0commons-loggingcommons-logging1.2

2、創(chuàng)建shiro.ini文件

Shiro獲取權(quán)限相關(guān)信息可以通過數(shù)據(jù)庫獲取,也可以通過ini配置文件獲取,這里演示配置文件

設(shè)定賬號和密碼

[users]
zhangshan=123
lisi=123
登錄認(rèn)證

概念:在shiro中,用戶需要提供principals(身份)和credentials(證明)給shiro,從而應(yīng)用能驗證用戶身份

最常見的principals和credentials組合就是賬號+密碼

public class shirotest {
    public static void main(String[] args) {
        //1、初始化獲取SecurityManager
        IniSecurityManagerFactory factory=new IniSecurityManagerFactory("classpath:shiro.ini");
        SecurityManager securityManager = factory.getInstance();
        SecurityUtils.setSecurityManager(securityManager);

        //2、獲取Subject對象
        Subject subject = SecurityUtils.getSubject();

        //3、創(chuàng)建token對象,web應(yīng)用用戶名密碼從頁面?zhèn)鬟f
        AuthenticationToken token=new UsernamePasswordToken("zhangsan","123");

        //4、完成登錄
        subject.login(token);
        //沒有拋異常就是登錄成功
        try {
            System.out.println("登錄成功");
        } catch (UnknownAccountException e) {
            e.printStackTrace();
            System.out.println("用戶不存在");
        }
        catch (IncorrectCredentialsException e){
            e.printStackTrace();
            System.out.println("密碼錯誤");
        }

    }
}
角色、授權(quán)

在shiro.ini中添加角色和對應(yīng)的權(quán)限

[users]
zhangsan=123,role1,role2
lisi=123

[roles]
role1=user:insert,user:select

進行角色的判斷和權(quán)限的判斷

public class shirotest {
    public static void main(String[] args) {
        //1、初始化獲取SecurityManager
        IniSecurityManagerFactory factory=new IniSecurityManagerFactory("classpath:shiro.ini");
        SecurityManager securityManager = factory.getInstance();
        SecurityUtils.setSecurityManager(securityManager);

        //2、獲取Subject對象
        Subject subject = SecurityUtils.getSubject();

        //3、創(chuàng)建token對象,web應(yīng)用用戶名密碼從頁面?zhèn)鬟f
        AuthenticationToken token=new UsernamePasswordToken("zhangsan","123");


        //沒有拋異常就是登錄成功
        try {
            //4、完成登錄
            subject.login(token);
            System.out.println("登錄成功");
            //5、判斷角色是否存在
            boolean hasRole = subject.hasRole("role1");
            System.out.println("是否擁有此角色:"+hasRole);
            //6、判斷權(quán)限--也可以使用checkPermission方法,但是沒有返回值,沒有權(quán)限拋出AuthenticationException異常

            boolean permitted = subject.isPermitted("user:insert");
            System.out.println("是否有user:insert權(quán)限:"+permitted);



        } catch (UnknownAccountException e) {
            e.printStackTrace();
            System.out.println("用戶不存在");
        }
        catch (IncorrectCredentialsException e){
            e.printStackTrace();
            System.out.println("密碼錯誤");
        }

    }
}
shiro加密

Shiro內(nèi)嵌很多常用的加密算法,比如MD5加密

public class ShiroMD5 {

    public static void main(String[] args) {
        //加密
        String password="123";
//使用md5加密
        Md5Hash md5Hash=new Md5Hash(password);
        System.out.println(md5Hash);

//帶鹽的md5加密
        Md5Hash md5Hash2=new Md5Hash(password,"salt");
        System.out.println(md5Hash2);
//多次迭代加密
        Md5Hash md5Hash3=new Md5Hash(password,"salt",3);
        System.out.println(md5Hash3);

        //使用父類進行加密
        SimpleHash simpleHash=new SimpleHash("MD5",password,"salt",3);
        String s = simpleHash.toHex();
        System.out.println(s);
    }
}
Shrio自定義登錄認(rèn)證

創(chuàng)建MyRealm類繼承AuthenticatingRealm

1、自定義登錄認(rèn)證方法,shiro的login方法的底層會調(diào)用該類的認(rèn)證方法進行認(rèn)證
2、需要配置自定義的realm生效,在ini文件中可以配置,在springboot中可以配置
3、該方法只是獲取進行比對的信息,認(rèn)證邏輯還是按照shiro底層邏輯認(rèn)證完成

public class MyRealm extends AuthenticatingRealm {

    //自定義登錄認(rèn)證方法,shiro的login方法的底層會調(diào)用該類的認(rèn)證方法進行認(rèn)證
    //需要配置自定義的realm生效,在ini文件中可以配置,在springboot中可以配置
    //該方法只是獲取進行比對的信息,認(rèn)證邏輯還是按照shiro底層邏輯認(rèn)證完成

    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        //1、獲取身份信息
        String principal = authenticationToken.getPrincipal().toString();
        //2、獲取憑證信息
        String password=new String((char[]) authenticationToken.getCredentials());
        //3、訪問一下數(shù)據(jù)庫獲取用戶信息(模擬)
        System.out.println(principal+password);
        if (principal.equals("zhangsan")){
            //獲取出數(shù)據(jù)庫中存儲的加鹽3次迭代密碼,這里是123
            String pwd="07ca00e10899418f0ea4ab92a9d69065";
            //4、創(chuàng)建封裝校驗邏輯對象,封裝數(shù)據(jù)返回
            //身份信息,密碼信息,
            AuthenticationInfo info=new SimpleAuthenticationInfo(
                    authenticationToken.getPrincipal(),//身份信息
                    pwd,//加密后的密碼
                    ByteSource.Util.bytes("salt"),//加密的鹽
                    authenticationToken.getPrincipal().toString()
            );
            return info;
        }



        return null;
    }
}

這里是使用ini文件進行配置

在shiro.ini中添加

[main]
md5CredentialsMatcher=org.apache.shiro.authc.credential.Md5CredentialsMatcher
md5CredentialsMatcher.hashIterations=3

myrealm=com.atguigu.MyRealm  //MyRealm類所在位置
myrealm.credentialsMatcher=$md5CredentialsMatcher
securityManager.realms=$myrealm

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


網(wǎng)頁名稱:Shrio入門-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://weahome.cn/article/deedid.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部