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

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

SpringBoot集成Shiro并使用SHA-256加密密碼的方法

這篇文章主要介紹“Spring Boot集成Shiro并使用SHA-256加密密碼的方法”,在日常操作中,相信很多人在Spring Boot集成Shiro并使用SHA-256加密密碼的方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Spring Boot集成Shiro并使用SHA-256加密密碼的方法”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

桐城ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

我們不能將用戶的密碼以明文存儲,否則如果自己的數(shù)據(jù)庫被入侵,用戶在其他網(wǎng)站的帳號也可能被盜。

注冊時生成密文

Shiro 提供了一個 SimpleHash 類可以很方便的對字符串進行加密,只需一行代碼就可以對密碼進行加密。

String hashPassword = new SimpleHash("SHA-256", password, username+"reg", 1024).toString();

它的第一個參數(shù)是加密的算法,第二個是要加密的內(nèi)容,第三個是鹽(這個參數(shù)隨便你定),第四個是期望的次數(shù)。

得到加密之后的密碼,就可以將整個 User 對象存儲到數(shù)據(jù)庫中,以后登錄的時候再通過 Realm 查詢。

/**

 * 注入用于存儲 user 對象

 */

@Autowired

private UserService userService;

@GetMapping("reg")

public Object reg(@RequestParam(name = "username") String username,

                  @RequestParam(name = "password") String password) {

    String hashPassword = new SimpleHash("SHA-256", password, username+"reg", 1024).toString();

    User user = new User();

    user.setUsername(username);

    user.setPassword(hashPassword);

    user.setSalt(username + "reg");

    userService.addUser(user);

    return "注冊成功";

}

Realm

上一篇文章說了如何實現(xiàn)登錄,但是當(dāng)時沒有對密碼進行加密。

加密之后的 Realm 又該怎么寫了呢?

Shiro 給人一種感覺:基本的東西我都準備好了,你要啥就自己加。

所以只需要在自定義 Realm 里重寫它的 setCredentialsMatcher 接口,在里面指定算法類型、期望的次數(shù)就行了。

@Override

public void setCredentialsMatcher(CredentialsMatcher credentialsMatcher) {

    HashedCredentialsMatcher matcher = new HashedCredentialsMatcher();

    matcher.setHashAlgorithmName("SHA-256");

    matcher.setHashIterations(1024);

    super.setCredentialsMatcher(matcher);

}

這里跟注冊時基本一致,不過好像沒有指定鹽?

加密使用了鹽,驗證的時候也少不了它,只不過它不是寫在這里的,畢竟每個用戶的鹽可能是不一致的(鹽根據(jù)你自己的想法去設(shè)置)。

可還記得 doGetAuthenticationInfo 方法返回了一個身份認證信息對象供 Shiro 驗證,使用鹽之后,在創(chuàng)建這個對象的時候把鹽傳進去就行了。

注意:因為現(xiàn)在需要的不僅僅是密碼,還需要鹽。所以模擬查詢數(shù)據(jù)庫的時候不能僅僅返回一個字符串了,而是應(yīng)該返回一個對象,然后從對象中取出密碼、鹽。

/**

 * 注入用于存儲 user 對象

 */

@Autowired

private UserService userService;

@Override

protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {

    String username = token.getPrincipal().toString();

    User user = userService.getUserByUsername(username);

    if (user != null) {

        String password = user.getPassword();

        AuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(

            username,

            password,

            //傳入鹽

            ByteSource.Util.bytes(user.getSalt()),

            getName());

        return authenticationInfo;

    }

    return null;

}

模擬存取 User 對象

一切為了簡單。

@Service

public class UserService {

    private HashMap users = new HashMap<>();

    public void addUser(User user) {

        users.put(user.getUsername(), user);

    }

    public User getUserByUsername(String username) {

        return users.get(username);

    }

}

到此,關(guān)于“Spring Boot集成Shiro并使用SHA-256加密密碼的方法”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
新聞名稱:SpringBoot集成Shiro并使用SHA-256加密密碼的方法
URL地址:http://weahome.cn/article/iijdgp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部