我已經嘗試覆蓋commit()方法來取代 _userPrin cipal或使用getSubject()。getPrincipals()。add(new PrincipalImpl(「user」))附加我自己的實現。 沒有按預期工作。
你會得到什麼樣的錯誤?
無論如何,我認爲你的問題在於這個過程的第三步。 SecurityContext僅將BASIC_AUTH,FORM_AUTH,CLIENT_CERT_AUTH,DIGEST_AUTH定義爲AuthenticationScheme,因此SecurityContext可能無法看到您的安全方案或類型的實現。但你可以嘗試這些步驟,我希望他們會爲你工作。
A-實現一個Java身份驗證和授權服務(JAAS)的LoginModule或延長com.sun.appserv.security.AppservPasswordLoginModule
public class MyLoginModule extends AppservPasswordLoginModule {
@Override
protected void authenticateUser() throws LoginException {
if (!authenticate(_username, _password)) {
//Login fails
throw new LoginException("LoginFailed");
}
String[] myGroups = getGroupNames(_username);
commitUserAuthentication(myGroups);
}
private boolean authenticate(String username, String password) {
/*
Check the credentials against the authentication source, return true if authenticated, return false otherwise
*/
return true;
}
private String[] getGroupNames(String username) {
// Return the list of groups this user belongs to.
}
B-實現您的領域類。
public class MyRealm extends AppservRealm {
@Override
public void init(Properties props)
throws BadRealmException, NoSuchRealmException {
//here you initialize the realm
}
@Override
public String getAuthType() {
return "Custom Realm";
}
}
C-安裝並配置領域和LoginModule到服務器。
爲此,您需要查看JSR 196並通過實現javax.security.auth.message.module.ServerAuthModule來編寫自己的SAM。看看下面的鏈接。 https://blogs.oracle.com/enterprisetechtips/entry/adding_authentication_mechanisms_to_the
來源
2014-02-12 19:01:25
jax
由於問題在10個月前被問到,我甚至不能告訴你我們有什麼問題。不幸的是,我也無法測試您的方法,因爲我們使用了不同的解決方案。但是,既然你試圖回答這樣一個老問題,我會努力回答你的回答:) – Kai