bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

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接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

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

注冊時(shí)生成密文

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

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

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

得到加密之后的密碼,就可以將整個(gè) User 對象存儲到數(shù)據(jù)庫中,以后登錄的時(shí)候再通過 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

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

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

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

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

@Override

public void setCredentialsMatcher(CredentialsMatcher credentialsMatcher) {

    HashedCredentialsMatcher matcher = new HashedCredentialsMatcher();

    matcher.setHashAlgorithmName("SHA-256");

    matcher.setHashIterations(1024);

    super.setCredentialsMatcher(matcher);

}

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

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

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

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

/**

 * 注入用于存儲 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<String, User> 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é)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

當(dāng)前標(biāo)題:SpringBoot集成Shiro并使用SHA-256加密密碼的方法
標(biāo)題路徑:http://vcdvsql.cn/article18/iijdgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站網(wǎng)站制作網(wǎng)站營銷網(wǎng)站改版App開發(fā)網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司