思路比較簡單,實現也簡單,要的就是簡單! 實際專案中可以此基礎上封裝
重寫usernamepasswordtoken 中 getcredentials() 方法。所以新增了類nopwdtoken
在userrealm類中的dogetauthenticationinfo(authenticationtoken authctoken)方法執行時,判斷引數authctoken的型別如果是nopwdtoken型別,則返回值改為getcredentials()方法對應的驗證資訊。(即:******hash ******hash = new ******hash("sha-256", "123456", null, 16);)。
1、增加類:nopwdtoken(關鍵地方是20行重寫的方法)
import org.apache.shiro.authc.usernamepasswordtoken;
public class nopwdtoken extends usernamepasswordtoken
private string username;
public string getusername()
public void setusername(string username)
@override
public object getcredentials()
}
2、修改userrealm類中 的 dogetauthenticationinfo(authenticationtoken authctoken) 方法。(關鍵地方是2-13行)
// 判斷是否免密登陸型別
if (authctoken instanceof nopwdtoken) else
} else
測試:
/**
* 免密登陸
*/@syslog("免密登陸")
// 使用自定義token
nopwdtoken ssotoken = new nopwdtoken(username);
subject.login(ssotoken);
} catch (unknownaccountexception e) catch (incorrectcredential***ception e) catch (lockedaccountexception e) catch (authenticationexception e) catch (exception e)
sysuserentity sysuser = shiroutils.getuserentity();
sysuser.setpassword(null);
try catch (ioexception e)
return r.ok().put("user", sysuser);
}
傳送請求:http://localhost:9000/sys/nopwdlogin?username=yuer
其他問題:
1、如果加密型別和上方不同,可以參考 org.apache.shiro.authc.credential.hashedcredentialsmatcher 中 hashprovidedcredentials 方法。斷點打在這裡就可以看到了,如圖
2、使用者輸入密碼和實際密碼比較方法具體位置在 org.apache.shiro.authc.credential.hashedcredentialsmatcher 中 docredentialsmatch 方法。如下圖:
Linux免密登陸
a為本地主機 即用於控制其他主機的機器 b為遠端主機 即被控制的機器server 假如ip為172.24.253.2 a和b的系統都是linux 在a上的命令 ssh keygen t rsa 連續三次回車,即在本地生成了公鑰和私鑰,不設定密碼 ssh root 172 24.253 2 mkdir...
ssh 免密登陸
摘要 在本地生成公鑰私鑰對,並將公鑰上傳至 server 端實現免密登陸。1.使用 ssh keygen 生成金鑰 ssh keygen t rsa f filename在生成金鑰對時,會要求輸入 passphrase generating public private rsa key pair.e...
ssh免密登陸
有兩台linux機器 node1 172.16.160.92 node2 172.16.160.91 先在node1 172.16.160.92 這台機器操作 生產金鑰 ssh keygen t rsa p 回車把id rsa.pub追加到授權的key裡面去。cat ssh id rsa.pub s...