国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
使用Shiro1.2中的PasswordService實(shí)現(xiàn)密碼加密存儲和比對
使用Shiro1.2中的PasswordService實(shí)現(xiàn)密碼加密存儲和比對
在Shiro之前的版本中,密碼加密一般采用如下代碼:[java] view plaincopy
String digestString = new Sha256Hash(password, salt, numIterations).toBase64();
密碼比對一般采用HashedCredentialsMatcher或Sha256CredentialsMatcher等相關(guān)比對類,在新版1.2中,增添了一項(xiàng)重要的功能就是密碼服務(wù),使得加密和比對更加方便。
比如:
加密就只需要密碼這個參數(shù)[java] view plaincopy
PasswordService svc = new DefaultPasswordService();
svc.encryptPassword(password);
比對就用如下語句:encrypted是密文[java] view plaincopy
svc.passwordsMatch(password, encrypted);
看到上述代碼,一個感覺就是:程序邏輯很清晰。
同樣的,在1.2中,同樣可以通過密碼服務(wù)配置,實(shí)現(xiàn)與jdbc中的密碼密文進(jìn)行比對。直接上代碼了:
以下是shiro.ini
[plain] view plaincopy
passwordService = org.apache.shiro.authc.credential.DefaultPasswordService
passwordMatcher = com.helloweb.shm.PasswordMatcherEx
passwordMatcher.passwordService = $passwordService
ds = com.mysql.jdbc.jdbc2.optional.MysqlDataSource
ds.serverName = 192.168.1.101
ds.user = root
ds.password =******
ds.databaseName = helloweb
ds.url = jdbc:mysql://192.168.1.101:3306/helloweb
jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.permissionsLookupEnabled = true
jdbcRealm.authenticationQuery = SELECT password FROM user WHERE username = ?
jdbcRealm.dataSource = $ds
jdbcRealm.credentialsMatcher = $passwordMatcher
authc.loginUrl=/login.jsp
[urls]
/admin/**=authc
說明,com.helloweb.shm.PasswordMatcherEx是我對org.apache.shiro.authc.credential.PasswordMatcher進(jìn)行了修正,重寫了getStoredPassword()方法,如下:
[java] view plaincopy
package com.helloweb.shm;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.credential.PasswordMatcher;
public class PasswordMatcherEx extends PasswordMatcher {
@Override
protected Object getStoredPassword(AuthenticationInfo storedAccountInfo) {
Object stored = super.getStoredPassword(storedAccountInfo);
if (stored instanceof char[]) {
stored = String.valueOf((char[]) stored);
}
return stored;
}
}
重寫的原因是,JdbcRealm返回給PasswordMatcher的哈希值被保存為char[]型,而PasswordMatcher 卻希望getCredentials()返回一個String或Hash。
用戶登錄代碼如下:
[java] view plaincopy
public String doLogin() {
Subject currentuser = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(username,
password);
try {
if (currentuser.isAuthenticated())
currentuser.logout();
currentuser.login(token);
return SUCCESS;
} catch (Exception e) {
addActionError("用戶名或密碼有誤");
return ERROR;
}
}
用戶注冊代碼如下:
[java] view plaincopy
public String doReg() {
if (isLegal()) {
User user = new User();
PasswordService svc = new DefaultPasswordService();
String encrypted = svc.encryptPassword(password);
user.setUsername(username);
user.setPassword(encrypted);
UserDAO ud = new UserDAO();
if (!ud.findByUsername(username).isEmpty()) {
addActionError("用戶名已存在!");
return ERROR;
}
ud.save(user);
addActionMessage("注冊成功!");
} else {
addActionError("注冊信息填寫有誤!");
return ERROR;
}
return SUCCESS;
}
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Shiro | 實(shí)現(xiàn)權(quán)限驗(yàn)證完整版
25行Python代碼輕松解決zip文件加密問題
SpringBoot+Shiro學(xué)習(xí)之密碼加密和登錄失敗次數(shù)限制 | z77z的小碼窩 | 年少無為,賣碼為生。
JavaWeb|Springboot整合Shiro實(shí)現(xiàn)登錄驗(yàn)證
教你破解工作表的加密!黑科技
Apache Shiro 簡介
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服