2013-04-02 82 views
6

我跟着instructions爲我的glassfish創建了一個自定義安全領域。它一切正常,用戶正確認證。然而,問題是:如何在自定義安全領域(Glassfish)中使用自定義校長?

  • 用戶證書中的字符串
  • 的境界解密這個串並針對數據庫執行認證進行加密(作品)
  • 代替使用所述解密的值作爲主要的在securityContext中加密 字符串被傳遞。

我已經嘗試覆蓋commit()方法來替換_userPrincipal或使用getSubject().getPrincipals().add(new PrincipalImpl("user"))附加我自己的實現。沒有按預期工作。基本上這個問題很簡單:我如何在glassfish中的自定義安全領域中設置我自己的主體,使其可以與注入的securityContext一起使用?

我的環境:

  • Glassfish的3.1.2.2(生成5)全部資料
  • 運行認證背後的應用程序是一個JAX-RS 1.1基於應用
  • SecurityContext的是使用注射
  • 獲得

回答

2

我已經嘗試覆蓋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

+0

由於問題在10個月前被問到,我甚至不能告訴你我們有什麼問題。不幸的是,我也無法測試您的方法,因爲我們使用了不同的解決方案。但是,既然你試圖回答這樣一個老問題,我會努力回答你的回答:) – Kai

相關問題