我已經嘗試過關於安全模塊的Play教程! 1.2.3。 認證機制非常簡單直接。播放框架 - 自定義身份驗證
我有一個問題。如果我想實現自定義身份驗證,是否可以自定義安全模塊,或者我必須從頭開始編寫代碼?
例如,我想通過請求頭參數進行身份驗證,我該怎麼辦?
我已經嘗試過關於安全模塊的Play教程! 1.2.3。 認證機制非常簡單直接。播放框架 - 自定義身份驗證
我有一個問題。如果我想實現自定義身份驗證,是否可以自定義安全模塊,或者我必須從頭開始編寫代碼?
例如,我想通過請求頭參數進行身份驗證,我該怎麼辦?
安全模塊是微小的:你可以從這個模塊得到所有的代碼,把它放在你的應用程序,如果你想使您可以編寫一個插件一個更大的東西定製你想要的
。你可以在我的permsec-module看到一個例子,不幸的是這個例子還在建設中,但應該包含你需要的一切。請參見PsecPlugin。
您可以使用@Before
批註在控制器中進行基本身份驗證。然後在請求方法中檢查是否設置了帳戶參數。
@Before
static void checkAuth() {
// Get auth header
Header auth = request.headers.get("authorization");
if (auth == null) return;
// Get basic auth value
String authValue = auth.value();
if (authValue == null) return;
// Split header components
String[] authComp = authValue.split(" ");
if (authComp.length != 2) return;
// Decode base64 auth string
String basic = new String(Codec.decodeBASE64(authComp[1]));
String[] userPass = basic.split(":");
if (userPass.length != 2) return;
// Try to fetch account
String email = userPass[0];
String pass = userPass[1];
String passSHA1 = Codec.hexSHA1(pass);
List<models.Account> accounts = models.Account.find("email password", email, passSHA1).asList();
if (accounts.size() != 1) return;
// Set account on request
request.args.put("_authenticatedUser", accounts.get(0));
}