2014-09-30 76 views
0

我已閱讀了與此主題相關的幾個問題(Jersey REST API as a separate web app,Should web service be separate from web site?),但我仍然很難理解哪種設計實踐對現有應用程序最有效。在現有的Web應用程序中創建一個API還是單獨的?

我繼承了一個基於spring和hibernate JPA構建的java web應用程序。目前正在開發新功能。

同時,我將需要設計一個REST API,它將具有某種形式的認證/用戶跟蹤。 Web應用程序擁有自己的用戶認證系統,可能與API實現(即username/pw vs api keys(?))不同。

鑑於這種情況,我認爲最好分開開發它們,但我覺得在開始時會有很多代碼重複(由於web應用程序中的所有jpa實現) 。理想情況下,一旦我有其他api的地方,我會切換Web應用程序以使用API​​,並刪除當前處理數據檢索的大部分後端代碼。

在我開始這條路線之前,我想知道,有沒有更好的方法來做到這一點?

回答

0

你可以使用Spring Security並創建一個自定義的AuthenticationProvider。您可以使用JNDI查找直接從Container自身獲取authservice。

例子:

@Component 
public class CustomAuthenticationProvider implements AuthenticationProvider { 
    @Autowired 
    private AuthService authService; 

public Authentication authenticate(Authentication authentication) 
    throws AuthenticationException { 
    String name = authentication.getName(); 
    String password = authentication.getCredentials().toString(); 

    // use the credentials to try to authenticate against the third party system 
    if (authService(name, password)) { 
     List<GrantedAuthority> grantedAuths = new ArrayList<>(); 
     return new UsernamePasswordAuthenticationToken(name, password, grantedAuths); 
    } else { 
     throw new AuthenticationException("Unable to auth against third party systems"); 
    } 
} 

@Override 
public boolean supports(Class<?> authentication) { 
    return authentication.equals(UsernamePasswordAuthenticationToken.class); 
} 

而且,這裏使用Spring閱讀更多關於RESTful API中:

http://www.baeldung.com/rest-with-spring-series/

+0

我約上我的現有應用程序的頂部添加春季安全主要關注的是兼容現有的身份驗證系統......或需要進行大規模更改才能使其工作。 – rcheuk 2014-09-30 17:38:33

+0

現有認證系統的體系結構是什麼? – br1337 2014-09-30 17:42:17

+0

習俗,據我所知。一對夫婦控制器處理用戶的會話,根據需要調用後端來登錄用戶並確定用戶的權限(這會影響用戶看到的屏幕) – rcheuk 2014-09-30 17:51:01

相關問題