在现有Web应用程序中创建API还是单独?

时间:2014-09-30 17:13:03

标签: java spring api rest jpa

我已经阅读了与此主题相关的几个问题(Jersey REST API as a separate web appShould web service be separate from web site?),但我仍然很难理解哪种设计方法最适合现有应用。

我继承了一个基于spring和hibernate JPA构建的java web应用程序。它目前正在开发中,正在开发新功能。

同时,我需要设计一个REST API,它将具有某种形式的身份验证/用户跟踪。 Web应用程序有自己的用户身份验证系统,可能与API实现不同(即用户名/ pw vs api密钥(?))。

鉴于这种情况,我认为最好单独开发它们,但我觉得在开始时,会有很多代码重复(由于Web应用程序中的所有jpa实现)。理想情况下,一旦我有其余的API,我就会切换Web应用程序以使用API​​并删除当前处理数据检索的大部分后端代码。

在我开始沿着这条路走之前,我想知道,有没有更好的方法呢?

1 个答案:

答案 0 :(得分: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 apis的更多信息:

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